JAVA中方法的继承
继承的定义:
一个类可以继承另外一个类,继承这个类以后就继承了他所有的属性和方法。
继承的作用:
子类继承父类,代码得到复用
继承是方法覆盖的重写和多态机制的前提(有了继承的关系才能有后面的方法的覆盖重写,和多态机制。)
继承的特点:
1.通常情况下,a类继承b类(a extends b),a类称为b类的子类,派生类,b类叫做父类,超类,基类。
2.在JAVA里,只能单继承(你只有一个爸爸)
3.虽然JAVA不支持多继承,但是可以实现间接继承(一个爸爸可以有多个儿子)
4.JAVA里也有一个祖宗类的说法(爷爷类),就是父类继承了一个Object类,那么Object类就叫爷爷类,爷爷的属性和方法可以通过父类传给子类(A-->B-->C)
5.继承也是有缺点的:在两个类实现继承关系时,会使代码耦合度提高(若父类改变属性,子类也会受到牵连,会产生影响)
6.子类的构造器可以有多个,但是必须和父类的构造器形式上统一。
继承的好处:
1.可以直接使用父类的接口和成员
2.可以直接创建子类,而无创建父类
3.让类与类之间产生关系,是多态的前提
继承的弊端:
1.无法改变父类,或者说无法在运行时选择父类
2.父类的改变会影响子类的改变。
继承中成员变量的特点:
1.只能继承父类的非私有化,成员变量名字相同就用子类名字,如不相同,子类没有,就用父类的
2.就近原则:谁离得近就用谁。如果有局部变量就先使用局部变量。如果没有局部变量,就先看子类的成员变量。如果子类的成员变量也没有,就看父类的成员变量。
3.super:和this用法很像,super表示父类。
方法的覆盖(重写)
方法的重写与方法的重载的区别
方法重载:
在一个类中,如果方法的功能相似,那么就会使用方法的重载
什么条件满足后会构成方法的重载?
- 前提:在同一个类中
- 方法名相同
- 参数列表不同(参数的个数,参数的类型,参数类型的顺序)
- 方法重载于修饰符列表和返回值无关
方法的重写:
当子类从父类继承过来的方法无法满足子类的业务需求时,子类有权利对这个方法进行重新编写
什么条件满足后会够称方法的重写?
- 前提:在继承关系中
- 方法名和参数列表都相同
- 访问权限不能更低,可以更高
- 子类返回值类型必须小于等于父类返回值类型
- 抛出异常:重写的方法不能抛出比被重写的方法更大的异常
开发中,如果要重写,基本就是一模一样,我们只变方法体
面试题:
* == 和equals()
* 数组的length和Stirng的length
* this和super
* 重载和重写
示例:
public class Test2 {
public static void main(String[] args){
EnglishPerson enPer = new EnglishPerson();
ChinaPerson cPer = new ChinaPerson();
enPer.speak();
cPer.speak();
}
}
class Person {
String name; //姓名
String skinColor; //肤色
public void speak() {
System.out.println("人在讲话");
}
}
class EnglishPerson extends Person{
public void speak() {
System.out.println("英国人讲话说英语");
}
}
class ChinaPerson extends Person {
public void speak() {
System.out.print("中国人讲话说汉语");
}
}
输出结果:
链式处理:
public class Ch02 {
public static void main(String[] args) {
Person person = new Person();
// 链式处理
person.setName("张三").setAge(20);
// person.setAge(20);
}
}
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public Person setName(String name) {
this.name = name;
return this;
}
public Integer getAge() {
return age;
}
public Person setAge(Integer age) {
this.age = age;
return this;
}
}
super关键字:
代表调用父类的结构(属性、方法、构造器)
面试题:this和super的区别?
*
* 在子类中当使用super调用父类的构造器时,super(age)必须是第一句话
* 在当前类中使用this调用本类的构造器时,this(name)必须是第一句话
* 在构造器中,如果需要使用super或this调用其他构造器,只能二选一,而且还必须是第一句话
*
* super指向的父类,不代表任何对象。
* this指向的本类,代表当前类的对象,方法的调用者。this可以代表对象,super不可以