探索理解java类继承——Java父类私有属性是如何继承的?

1、Java 继承的概念

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

2、Java继承的特点

(1)子类拥有父类非 private 的属性、方法。

(2)子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

(3)子类可以用自己的方式实现父类的方法。

(4)Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

(4)提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

3、Java继承存在的问题

(1)根据上述定义可以得出,子类B继承父类A,父类A存在私有属性,创建类B对象b的时候,b不拥有A的私有属性。
(2)创建类B的对象会调用类A的构造方法,但不会创建类A的对象,创建的是类B的对象b。
(3)类B的对象b可以通过公有方法间接访问类A中定义的属性。
(4)综上所述,创建子类对象时,父类的私有属性会被创建,但又不属于子类,又不存在父类对象。是不是很奇葩?

4、上Java代码——做个小实验

public class ClassExtends{
    public static void main(String [] args){
        System.out.println("Hello,World!");
        Animal animal=new Animal();
        animal.eat();
        Dog dog1=new Dog();
        Dog dog2=new Dog("bage",12);
        dog2.getName();

    }
}

class Animal{
    private String name;
    private int age;
    public Animal(){
        System.out.println(this+"\tAnimal对象引用,Animal的构造函数");
    }
    public Animal(String name,int age){
        System.out.println(this+"\tAnimal对象引用,Animal的构造函数(带参数)");
        this.name=name;
        this.age=age;
    }
    public void eat(){
        System.out.println(this+"\t对象吃饭");
    }
    public String getName(){
        System.out.println(this+"\t调用Animal的getName()");
        return this.name;
    }
    public int getAge(){
        System.out.println(this+"\t调用Animal的getAge()");
        return this.age;
    }
}
class Dog extends Animal{
    public Dog(){
        //super();
        System.out.println(this+"\t我是dog对象引用,Dog的构造函数");
    }
    public Dog(String name,int age){
        super(name,age);
    }
}

运行结果:

Hello,World!
Animal@15db9742 Animal对象引用,Animal的构造函数
Animal@15db9742 对象吃饭
Dog@6d06d69c    Animal对象引用,Animal的构造函数
Dog@6d06d69c    我是dog对象引用,Dog的构造函数
Dog@7852e922    Animal对象引用,Animal的构造函数(带参数)
Dog@7852e922    调用Animal的getName()

5、结论

(1)创建子类对象是,子类会隐式的全部继承父类定义的所有属性、方法。
(2)子类对象只能显示的拥有(访问)非私有属性、方案。
(3)子类对象可以通过父类的公有方法访问父类定义的方法。

发布了2 篇原创文章 · 获赞 0 · 访问量 53

猜你喜欢

转载自blog.csdn.net/baguiming456/article/details/104611123
今日推荐