Java面向对象 三
----------继承
将重复代码抽取到父类中,
有点:方便修改代码,减少冗余。
子类与父(基)类是is--a的关系
使用继承:
父类 class xx{
子类 class xx extends xx{
1,继承与真实世界类似符合is—a关系的可使用继承
2,继承是代码重用的一种方式,将子类共有的属性和行为放到父类中
理解继承:
子类继承父类的什么?
1,继承public 和 protected修饰的属性和方法,不管子类与父类是否在一个包里
2,继承默认权限修饰符修饰的属性与方法,但子类与父类必须在同一个包里
不能被继承的父类成员
访问父类构造方法
super();
super(name);
访问父类属性
super.name;
super.print();
ps: 1,使用super关键字,super代表父类对象
2,在子类构造方法中调用,且必须是第一句
3,不可以访问父类中定义为private的属性和方法
super关键字来访问父类的成员
1,super只能出现在子类的方法和构造方法中
2,super调用构造方法时,只能是第一句
3,super不能访问父类的private成员
super的使用
1,子类方法重写父类方法
2,在子类中定义了和父类同名的成员变量(super可以使被屏蔽的成员可见)
super与this:
区别 this super
访问属性 访问本类属性 访问父类属性
如果没有则从父类找
访问方法 访问本类方法 访问父类方法
如果没有则从父类找
访问构造 调用本类构造 调用父类构造
放在构造方法前 放在子类构造方法前
方法调用规则
1,子类构造方法 没有通过super显示调用父类的有参构造方法 也没通过this显示调用自身其他构造方法
(系统默认调用父类的无参构造方法)
2,子类构造方法通过super显示调用父类有参方法(执行父类相应构造方法,而不执行父类无参方法)
3,子类构造方法通过this显示调用自身其他构造方法在相应构造方法中y应用以上两条规则
单根继承(唯一支持的)
可以有一个直接父类,但可以有多个间接父类
如何访问父类的父类的成员?
不管是什么父类,只能用super来引用
Ps:直接或间接父类 都是object类(祖宗类)
继承的利于弊
利:提高了代码的可重用性,可扩展性性
弊:过于复杂的层次结构会影响代码的可重用性。
最佳:2-3层
方法重写规则:
1,方法名相同
2,参数列表相同
3,返回值类型相同或是其子类
4,访问权限不可严于父类
5,父类的静态方法不能被子类覆盖为非静态,非静态也不能被覆盖为静态
6,子类可以定义于父类同名的静态方法 以便在子类中隐藏父类的静态方法(静态方法中无法使用super)。
7,父类的私有方法不能被子类覆盖
8,不能抛出比父类方法更多的异常
Object类:
是所有类的直接或间接父类
Object类被子类经常重写的方法
toString() 返回当前对象本身的有关信息,按字符调用对象返回
equals()比较两个对象是否为同一个,是则返回true
hashCode() 返回该对像的哈希代码值
getClss()获取当前对象所属类的信息,返回class对象
equals()方法:
操作符 ==
简单数据类型 直接比较 如1==2
引用类型 比较两者是否tong同一对象
(1)Object类的equals方法于“==”没有区别
(2)当有特殊需求时 如认为属性相同即为同一对象时需要写equals
(3)Java,lang,Stringchon重写了equals方法 把equals方法的判断变为了判断其值
instanceof 用于比较一个引用类型是否属于同一个类的实例。