目录
一:继承_面向对象的三大特性之一
1.继承;子继父业
目的:为了提高代码的复用性
使用:子类extends父类
一个父类可以存在多个子类
单继承机制->一个子类只能存在一个父类
2.单继承:
简单
不够灵活,不便于后期维护,耦合度比较高
多实现->接口
面向对象的设计原则之一:开闭原则
为修改关闭,对扩展开放
私有的内容是否可以被继承
可以被继承,但是无权使用
子类无权使用父类私有的成员.=,但是可以通过设置器与访问器
构造器不能继承
例如:
class fu{ //父类
}
class zi extends fu{ //子类
}
二:访问权限修饰符的范围
本类 | 同包类 | 不同下的子类 | 不同包下的其他类 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
default | √ | √ | ||
protected | √ | √ | √ | |
private | √ |
所有的访问权限修饰符都是成员修饰符,只能修饰成员,不能修饰局部(局部内容不能被外部访问)
能够修饰类的:public|default(默认的,省略)
如果想要使用父类中继承的,被protected修饰成员,需要在子类中通过关系使用
1)子类中
2)通过继承关系
私有的内容只能在本类中使用
重点关注:public private
三:方法重写
回顾:方法重载 Overload
三个条件:同一个类中的多个方法
方法名相同
参数列表不同|方法签名不同
方法重写三个条件:
不同的两个类
继承关系|实现关系
方法签名相同
1.调用:
如果子类中存在方法的重写,当通过子类对象调用的时候,会调用子类中重写的方法,会对父类方法屏蔽
2.作用:
当子类从父类中继承了某个方法,方法满意,方法的实现不满意的时候,就可以在子类重新实现方法,重新定义方法
3.检查是否为重新方法:
1:在方法的左侧首存在0^标识
2.使用一个注解强制检查当前是否为一个重新方法@Override
4.方法重写的具体要求:
1.子类中重写方法签名==父类中被重写的方法
2.方法的返回值类型为基本数据类型要求->完全相等
引用数据类型->子类中重写的返回值类型<=父类中被重写方法的返回值类型
3.子类中重写方法的权限修饰符>=父类中被重写方法的权限修饰符
5.注意:
1;被private私有的方法不能被重写
2;被final修饰的方法不能被重写
3;静态方法不能被重写
当子类中出现于父类静态方法同名的方法.要求子类中这个同名方法也要被static修饰
四:super关键字
指代父类对象
1:在子类构造器的首行.调用父类中的构造器
语法:super(参数列表);
在子父类继承关系下,在创建子类对象的守护,先父类后子类,父类对象在子类对象内存空间中
如果在子类构造器的首行没有显示调用父类构造器,默认调用父类空构造
-
区分子类父类中同名成员问题
在子类中使用super指代子类内存空间中的父类对象
通过super.调用父类成员
在静态方法中不能使用this,super关键字
2.区分局部,子类成员,父类成员同名问题
列如:
public class Class002_Super {
public static void main(String[] args) {
new Son().test();
}
}
class Father{
String str = "Father";
}
class Son extends Father{
String str = "Son";
void test(){
String str = "jubu";
System.out.println(str); //就近原则 jubu
System.out.println(this.str); //子类成员 Son
System.out.println(super.str); //父类成员 Father
}
}