继承
概述
继承是描述java中类与类之间的关系的;使用extends关键字表示,前面是子类,后面是父类;
什么时候使用继承
当我们描述的多个事物之间存在包含(is a)关系的时候,可以使用继承的技术表示;使用继承之后,子类可以直接使用父类非私有的成员;
继承的语法格式
public class 子类类名 extends 父类类名{
}
继承的好处和弊端
好处
- 提升代码的复用性
- 提升代码的维护性
- 为多态提供了前提
弊端
- 降低了子类代码的独立性
- 增强了代码之间的耦合性
继承的特点
- java中的类与类之间只能单继承,不能多继承,可以多层继承;
- 子类可以直接使用父类(父类的父类)的内容;
继承中成员变量的访问
就近原则
当我们在子类的方法中直接写一个变量名时,如果方法内有局部变量,优先使用局部变量,如果局部变量没有,会使用成员变量,如果成员变量没有,会使用父类非私有的成员变量;
- 如果想直接访问局部变量,直接写变量名
- 如果想直接访问本类的成员变量,需要写this.成员变量名
- 如果想直接访问父类的成员变量,如果父类没有私有,可以使用super.成员变量名,如果私有了,可以利用父类的getXxx()方法获取成员变量的值
继承中成员方法的访问
优先找子类,子类没有再找父类;
方法重写
在子父类中,子类编写了和父类一模一样(名称,参数,返回值)的方法,就是重写;
ublic class ip1 {
public void call(String name){
System.out.println("给"+name+"打电话");
}
public void small(){
System.out.println("说英文");
}
}
ublic class ip2 extends ip1 {
@Override
public void small() {
super.small();
System.out.println("说中文");
}
}
方法重写的注意事项
继承中构造方法的特点
- 构造方法不能继承,但是我们可以在子类的构造方法中通过super()调用父类的构造方法;
- 如果创建子类对象,默认一定会先创建父类对象;
- 在子类的构造方法中,默认会调用父类的空参数的构造方法;
- 在子类的构造方法中,调用父类构造方法的时候,每个构造方法最多只能调用一次其他的构造方法;(而且是必须写在第一行调用)
ublic class person {
private String name;
private int age;
public person() {
}
public person(String name, int age) {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class student extends person {
private int score;
public student(){}
public student (String name,int age,int score){
super(name,age);
this.score = score;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}