第七周总结
继承
继承的目的和缺陷
1.解决代码冗余重复,提升代码效率,解决同类型的问题。
2.加强父类,修改父类方法,实现对应关系,还可以写特有的方法,青出于蓝而胜于蓝,在便捷的同时又能实现想要的功能。
3.体现了重写和多态的重要性。
4.耦合太高,容易出错。
5.只能单继承,不能多继承。
例如写一个动物园
动物之间有很多相同的性质和属性,例如动物的名字,科类。
当类和属性达到一定数量的时候,代码的重复结构很多,用继承能够很好的解决这个问题(entends)
class Animal//写一个animal父类
{
Animal(){}//一定要写无参构造,当没有写无参构造的时候,系统会自动分配一个无参构造,但是如果自己写了有参构造而没有写无参构造的时候,系统将不会自动分配一个无参构造!
String name;//定义一个共同属性
public void Eat(String food)//写一个共同行为的方法,后面继承的子类可以对其进行重写
{
System.out.println(name+"吃"+ food );
}
}
class Dog extends Animal//继承Animal这个父类
{
Dog(){}//无参构造
Dog(String name)//有参构造
{
this.name = name;//给name赋值
}
public void f()//实现特有功能
{
System.out.println("Dog能守门");
}
}
public class Test1 {
public static void main(String[] args)
{
Dog d = new Dog("Dog");
d.Eat("骨头");
d.f();
}
}
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RbQBEdVP-1649910592924)(C:\Users\86199\Desktop\QQ图片20220411191705.png)]
父类型引用指向子类型对象
public class Test1 {
public static void main(String[] args)
{
Animal a1 = new Dog();//属于自动类型装换,父类型引用指向子类型对象
a1.f();//试试调用子类型特有方法
}
}
编译结果
由此可见,父类型引用指向子类型对象是可以的,但是会牺牲掉子类的特有方法
值得注意的是,只能在继承中栈堆类型不一致!