继承与多态

一、继承
格式:通过extends关键字可以实现类与类的继承
class 子类类名 extends 父类类名{ }
缺点:耦合性提高,让类与类之间产生了关系,容易牵一发动全身
继承要慎用,降低了扩展性和维护性
什么时候使用继承?
1.一般在编写代码的时候出现了重复代码,我们可以将重复代码向上抽取成为一个父类的baseacitvity basedao
2.当某个类的设计非常复杂的时候,可以使用继承
3.让类与类产生了关系,这是多态的必要条件
继承的注意事项:
1.单一继承性 2.支持多层继承class C extends B { }class B extends A{ }
3.父类成员使用private修饰,理解为不能继承,所以父类成员一般都会用public 或者 protected修饰
4.如果一个子类继承了父亲的属性和方法,同时还可以有自己的方法
5.当子类成员和父亲成员重名的时候,子类优先
6.子类不能够继承父类的构造方法,但是子类可以访问父类的构造方法
super关键字
this和super的区别:
this可以理解为当前对象,谁调用this就代指那个调用者对象,每次创建一个对象,默认都会创建一个this变量指向同一个堆区空间
super本质是父类存储空间的标识,但是你可以理解为父类对象,那么同样可以使用super这个关键字来访问父类的成员
注意:
1.任何一个类的无参或者带参构造方法的第一句都默认省略super();
2.任何一个类都直接或者间接继承自object类
3.设计object类,满足了万事万物皆对象的原则
访问根类object的无参构造意义何在?--加载object类中静态成员和静态代码块
4.创建一个子类对象默认会去调用父类的构造方法,那么有没有在创建子类对象的同时也创建了父类对象呢?
----没有创建父类对象,本质就相当于访问了一个普通方法,创建对象开启空间需要new关键字
5.super访问父亲带参构造方法的意义?--帮助子类初始化父类继承下来的成员,简化编程
6.静态环境/静态上下文(static修饰的方法),不能够出现this和super
7.super必须出现在构造方法的第一句,this和super不能共存

访问权限修饰符:public >protected> default> private
1.public对一切类可见
2.protected对同包下和不同包的子类可见
3.default仅对同包下可见
4.private仅对本类可见
访问权限修饰符可以修饰成员变量,成员方法,还可以修饰类(只有public可以)
在这里需要注意,其实protected/private也可以修饰类,但必须是内部类
方法重写特点:
1.发生在具有子父类的两个类中 2.方法名相同3.参数列表完全相同4.返回值类型可以相同或者是其子类5.访问权限修饰符不能够严于父类
private修饰的方法不能够被继承,所以不能够被重写
注意事项:
1.父类中私有方法不能被重写
2.构造方法不能被重写
3.子类重写父类方法时,访问权限不能更低
4.重载和重写的比较(二者是完全不同的两个概念毫无关系)

final
修饰变量成为常量,不能够被二次赋值
局部变量
可以暂时不给出初始值
成员变量
在声明的时候必须给出初始值
修饰方法不能够被子类重写
修饰类不能够被子类继承 string类是final修饰的

二、多态
概述:同一个方法在不同的类下体现出来的不同的实现(java)
父类引用指向子类对象 (内存)
多态的必要条件:
1.必须存在继承关系
2.必须存在方法重写
3.必须存在父类引用指向子类对象
利用多态访问成员的特点:
成员变量
编译时期看左边类型,运行时期看左边类型
成员方法
编译时期看左边类型,运行时期看右边类型
构造方法
先访问父类的构造方法,帮助子类初始化父类继承过来的成员
静态方法
编译时期看左边类型,运行时期看左边类型
多态的缺点:父类引用无法访问子类所特有的方法
解决办法:向下转型
格式:<父类型> <引用变量名>=new <子类型>();(向上转型,自动转换)
<子类型> <引用变量名>=(<子类型>) <父类型的引用变量>;(向上转型,自动转换)
instanceof关键字:测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
记住:instanceof通常和向下转型结合使用

原文地址:https://www.cnblogs.com/yhgn/p/10771099.html