java中的继承语句
修饰符 Class 类名 extends 父类名 { //代码块 }
继承(inheritance)通过extends关键字来实现,修饰符如果是public 则该类在整个项目中可见,若无public修饰符则该类只在当前包可见,不可以使用private和protected修饰类
在java中,子类可以从父类中继承到那些 “财产”
1.继承public 和 protected 修饰的属性和方法,无论子类和父类是否在同一个包里。
2.继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里。
3.无法继承private 修饰的属性和方法。
4.无法继承父类的构造方法。
访问修饰符
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
private | √ | |||
friendly(默认) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
子类重写父类的方法
在Java中,实现多态的条件是非常简单的。
父类(普通类)
方法(普通方法)
子类 extends 父类
方法(普通方法 ----->和父类某个方法同名)
结论:
父类 父类对象=new 子类对象();
父类对象.方法名称()(父子都有) 一定打印出子类方法体内容
方法重写必须满足如下需求:
1.重写方法和被重写方法必须具有相同的方法名。
2.重写方法和被重写方法必须具有相同的参数列表。
3.重写方法的返回值类型必须和被重写方法的返回值类型相同或其子类。
4.重写方法不能缩小被重写方法的访问权限
--重载和重写有什么区别和联系?
重载:涉及同一个类中的同名方法,要求方法名相同,参数列表不同,于返回值类型和访问修饰符无关。
重写:涉及的是子类和父类之间的同名方法,要求方法名相同,参数列表相同,返回值类型相同(或是其子类),访问修饰符不能严于父类
super
super()父类的构造
super.父类的属性 或者方法 。必须是非私有的(protected,public)
super代表对当前对象的直接父类对象的默认引用,在子类中可以通过super关键子来访问父类的成员。
1.super必须出现在子类(子类的方法和构造方法)中,而不是其他位置。
2.可以访问父类的成员
3.无法访问父类的private成员。
抽象类和抽象方法
public abstract class Pet{ public abstract void eat(); } public class Cat extends Pet{ @Override public void eat(){ syso("dog Eat"); } } public class Penguin extends Pet{ @Override public void eat(){ syso("Penguin Eat fish"); } } Pet[] pets=new Pet[2]; Cat cat=new Cat(); Penguin penguin=new Penguin(); pets[0]=cat; pets[1]=penguin; for(Pet pet:pets){ pet.eat(); 子类重写父类的eat方法 多态的体现 }
抽象类和抽象方法的注意事项
1.抽象类中可以有抽象方法,也可以有非抽象方法
2.抽象方法中没有方法体,直接以分号结束
3.抽象方法必须在子类中重写,除非子类本身也是一个抽象类
4.如果用Abstract修饰,那么该类就是抽象类
5.抽象类不能被实例化
6.抽象类不能是静态类
7.抽象类可以有构造
8.抽象方法只能出现在抽象类中
9.抽象方法只是用来约束子类方法行为的
final修饰属性,方法,类
用final修饰的类,不能在被继承。
用final修饰的方法不能被子类重写。
用final修饰的变量(包括成员变量和局部变量)将变成常量,只能赋值一次。
继承关系下子类构造的执行过程
解析:
1.从Main---->子类构造不进入方法体
2.从子类构造------>父类构造
3.执行父类构造 ,创建了父类对象
4.回到子类构造,执行构造体
5.再回到Main。创建出对象