本文内容是继承的梳理和总结,本文内容包括:
继承解决了什么问题,或者说为什么使用继承。
继承解决了两个问题
用一个例子说明
一:定义宠物类Pet
public class Pet {
// 属性(数据)
String type; // 宠物类型
String name; // 宠物名称
String bread; //宠物品种
//构造
public Pet(String type, String name, String bread) {
this.type = type;
this.name = name;
this.bread = bread;
}
//构造
public Pet() {
this.type = "未知";
this.name = "未知";
this.bread = "未知";
}
// 自我介绍
@Override
public String toString() {
return """
主人好呀!,我是%s品种的%s,我的名字是%s
""".formatted(bread, type, name);
}
// 叫一声
public void sound(){
System.out.println("宠物叫了1声");
}
// 叫多声
public void sound(int times){
System.out.println("宠物叫了"+times+"声");
}
}
Pet类中定义的成员有:
二:定义猫类Cat
public class Cat extends Pet {
}
Cat类继承了Pet类,但是在Cat类中没有定义任何成员。
三:定义测试类PetShop
public class PetShop {
public static void main(String[] args) {
Cat cat = new Cat();
cat.name = "初九";
System.out.println(cat.name);
cat.sound(3);
}
}
运行测试类,结果如下:
初九
宠物叫了3声
例子写完了,你观察Cat类,发现Cat类中没有定义任何成员,Cat类的设计很简单。但是在测试类中cat对象确能调用name属性和sound()方法。你会说name属性和sound()方法是从父类Pet继承的,这个说法是对的。
换个角度想,通过继承是不是简化了子类的设计,父类有的子类就有了,这就是继承的第一个好处,简化子类的设计。
在思考一下,子类Cat调用的sound方法是从父类继承过来的,是不是子类复用了父类的方法,这就是继承的第二个好处,代码复用。
其实继承还有第三个好处,就是实现多态,但是这篇文章我没有打算梳理多态,关于多态先放下。
小结:
创建子类对象时,父类是否也创建了对象?
答:父类也创建了对象。
你想啊,如果在new子类对象时,如果没有new父类对象,也就没有为父类的成员分配内存,那么子类去哪里继承父类的成员呢!,这样想是不是更容易理解。
一个例子
public class A {
int a;
}
public class B extends A{
int b;
public static void main(String[] args) {
B b = new B();
}
}
第5行共new了3个对象
答:先new父类,以保证new子类时,子类能从父类继承到父类成员
答:子类功能多。
看第2个问题的图示,更容易理解
答:父类中定义的方法能够满足父类的需要。但是子类从父类继承的方法有时候不能满足子类的需要。这时,可以在子类中再次定义该方法,来满足子类的需要。此时父类和子类中都有相同的方法定义,这种情况称作子类对父类方法重新定义,即方法重写。
所以方法重写一定发生在继承关系中。
答:可以
子类调用自己的属性时使用 this
子类调用父类的属性时使用 super
子类默认调用自己的属性
这种情况也称为隐藏父类成员
答:Object类没有父类,Object是类的最高层。在Java中只有Object类没有父类。
答:这个答案你自己去看源码吧,我就不在这里一一列举了。
但是Object类有几个重要的方法,我给你写出来,帮你加深记忆
以下代码是Object类的源码
public boolean equals(Object obj) {
return (this == obj);
}
public native int hashCode();
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
答:final
继承中的三件事
小贴士:
你是否发现了,父类功能越强大,子类功能就越强大
所以,现实生活中有个富有的爹,孩子就能站在更高的平台上,努力让下一代成为富二代吧!
powered by kaifamiao