继承 extends
继承在程序中主要解决的问题就是:共性抽取
继承关系中的特点
1.子类可以拥有父类的内容
2.子类可以拥有自己的专属内容
继承中成员变量的访问特点
在父子类的继承关系中,如果出现重名成员,访问方法有两种:
1.直接new出来的是哪个对象,就用哪个对象的成员
2.通过成员方法访问成员,在子类中如果找不到就到父类中去找
Super
如果想在子类的方法中访问到父类的成员变量
可以用super.变量名
对于三种重名,即子类中的变量名、父类中的变量名,以及子类方法中的变量名相同的时候
局部变量:直接写成员变量名
本类中的成员变量:this.变量名
父类中的成员变量:super.变量名
重写 Override
在继承关系中,方法的名称一样,参数列表也一样
重写和重载的区别
重写是在继承关系中的,方法的名称一样,参数列表也一样,重写也叫覆盖,覆写
重载时,方法的名称一样,参数列表不一样
方法覆盖重写的特点,创建的对象是谁,就有谁的方法
注意事项
1.必须保证父类和子类之间的方法名称相同,参数列表也相同
@override:写在方法前,用来检测是不是有效的正确重写
△
子类的返回值必须小于等于父类方法返回值的范围
必须保证父类和子类之间的方法名称相同,参数列表也相同
java.lang.Object 类是所有类的公共最高父类 , java.lang.String 就是 Object 的子类
子类的返回值必须小于等于父类方法返回值的范围
子类方法的权限必须大于等于父类方法的权限
从大到小 public > protected>(default)>private
default 不是关键字,而是什么都不写,留空
继承中构造方法的特点
-
继承关系中,子类构造方法当中默认含有一个super.方法名,所以一定会调用父类构造,后执行子类构造
-
可以通过super关键字在子类构造中调用父类重载构造(默认无参构造,重载以后可以进行有参构造)
-
super的父类构造调用,必须是子类构造方法的第一个语句,不允许一个子类中多次调用super构造
-
子类必须调用父类构造方法,不写就默认赠送一个super():子饿了就用写的哪一个,super只能有一个,而且必须是第一个。
super关键字的用法
- 在子类的成员方法中访问父类的成员变量 ——>super.变量名
- 在子类的成员方法中访问父类的成员方法——>super.方法名
- 在子类的构造方法中访问父类的构造方法——>super();
this关键字
- this关键字用来访问本类内容,super用来访问父类内容
访问成员变量
本类:this.变量名
父类:super.变量名
- 在本类中访问本类的另外一个成员方法
this.方法名或者直接另一个成员方法的方法名
- 在本类的构造方法中,访问另个一个本类构造方法
例如。本类的无参构造调用本类的有参构造 this(参数类型 参数名)
注意
this(…)调用也必须是构造方法中的第一个语句,且是唯一 一个
super 和this两种调用不能同时存在,因为二者都必须是第一个
Java 继承的三个特点
Java语言是单继承的,一个类的直接父类只有一个
Java语言可以多级继承
一个父类可以有多个子类
抽象方法和抽象类的使用 abstract
抽象方法:加上abstract关键字,去掉大括号,直接分号结束
抽象类:抽像方法所在的类,必须是抽象类才行,在class之前写上abstract即可。
如何使用抽象类和抽象方法:
1.不能直接创建new抽像对象
2.必须用一个子类继承父类
3.子类必须覆盖重写父类中的所有抽象方法
4.覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号