海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java教程:面向对象的三大特性super关键字

未分类
2020-08-10 09:59:24
1822677238@qq.com

手机扫码查看

2020java教程:面向对象的三大特性super关键字

面向对象的三大特性super关键字

super关键字
在子类中,可直接访问从父类继承到的属性和方法,但如果父子类的属性或方法存在重名(属性遮蔽,方法覆盖)时,需要加以区分,才可以专项访问。

super访问方法

public class demos{
    public static void main(String[] args) {
        Sub s=new Sub();
        s.name="西瓜虫";
        s.eat("西瓜");
    }
}


class Super{
    String name;
    int age;
    public void eat(String feed){
        System.out.println(name+"吃了"+feed);
    }
}
class Sub extends Super{
    //要使用super关键词必须继承父类
    //如何做到与父类相同方法以及相同代码?
    //如果手写代码的话,会不会多余,造成代码的冗余呢?
    public void eat(String feed){
        //使用 super 关键字 调用父类的方法
        //前提必须 父子类属于继承关系,否则属于同类,不能调用
       super.eat(feed);
    }
}

super关键字访问属性

public class demos{
    public static void main(String[] args) {
        Dog d=new Dog();
        d.method("我是猫");
    }
}
class Animal{
    String name="Animal";
}
class Dog extends Animal{
    String name="Dog";
    public void method(String name){
        //此时 name 为形参的name
        System.out.println(name);//我是猫
        //此时 name 为当前对象的 name
        System.out.println(this.name);//Dog
        //此时 name 为当前对象父类的 name
        System.out.println(super.name);//Animal
    }
}

继承中的对象创建
1.在具有继承关系的对象创建中,构建子类对象会先构建父类对象
2.由父类的共性内容,叠加子类的独有内容,组合成完整的子类对象

public class demos{
    public static void main(String[] args) {
    }
}
class Animal{
    String name;
    int age;
    public void eat(){}
}
class Dog extends Animal{
    //由于子类继承父类,也有name属性和age属性以及eat方法
    //sex属性属于该对象独有属性,run方法也是该对象独有的方法
    String sex;
    public void run(){}
}

 

继承后的对象构建过程

public class demos{
    public static void main(String[] args) {
        TaiDi td=new TaiDi();//2.3 创建子类对象,优先创建父类对象
        td.sleep();
    }
}
//1.分配空间Animal、Dog、TaiDi
//2.2 创建父类对象 Object
class Animal{//2.1 创建父类对象Animal
    //3.2初始化属性和方法 4.2执行构造方法代码
    String name;
    public void eat(){System.out.println("Animal的eat方法");}
}
class Dog extends Animal{//2.创建父类对象Dog
    //3.1初始化属性和方法  4.1执行构造方法代码
    int age;
    public void run(){
        super.eat();//调用父类的eat方法
        System.out.println("Dog的跑方法");
    }
}
class TaiDi extends Dog{
    //3.初始化属性和方法  4.执行构造方法代码
    String weight;
    public void sleep(){
        super.run();//调用父类的run方法
        System.out.println("泰迪的sleep方法");
    }
}

super调用父类无参构造

public class demos{
    public static void main(String[] args) {
        new Tom();
    }
}
class Animal{
    public Animal(){
        System.out.println("Animal 无参构造");
    }
}
class Dog extends Animal{
    public Dog(){
        super();
        System.out.println("Dog 无参构造");
    }
}
class Tom extends Dog{
    public Tom(){
        super();
        System.out.println("Tom 无参构造");
    }
}

//运行结果为
Animal无参构造
Dog无参构造
Tom无参构造

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注