目录
1:继承的概述
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
通过extends关键字可以实现类与类的继承
class 子类名 extends 父类名 {}
2:继承的优缺点
1:继承的好处
提高了代码的复用性
多个类相同的成员可以放到同一个类中 提高了代码的维护性
如果功能的代码需要修改,修改一处即可 让类与类之间产生了关系,是多态的前提
2:弊端:类的耦合性很强
耦合是指类与类之间的关系
内聚就是类自己完成某件事的能力
开发的原则是低耦合高内聚
3:继承的特点
Java只支持单继承,不支持多继承。
一个类只能有一个父类,不可以有多个父类。
例如:class A extens c extens b{}//错误
支持多层继承(继承体系)
class A{}
class B extends A{}
class C extends B{}
5:注意事项
子类只能继承父类所有非私有的成员(成员方法和成员变量) (其实这也体现了继承的另一个弊端:打破了封装性)
子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。( 不要为了部分功能而去继承)
我们到底在什么时候使用继承呢? (继承中类之间体现的是:”is a”的关系。)
6:继承中成员变量的关系
首先在子类局部范围找
然后在子类成员范围找
最后在父类成员范围找(肯定不能访问到父类局部范围)
如果还是没有就报错。
例如:
class Fu{
int a=10;
int b=20;
}
class Zi extends Fu{
int a=30;
public void show(){
System.out.println(a);//调用自己的成员变量
System.out.println(b);//调用父类的成员变量
}
}
public class Text3 {
public static void main(String[] args) {
Zi zi = new Zi();//创建子类对象
zi.show();//调用子类show方法
}
}
7:继承与成员方法的关系
1、子类的成员方法与父类的成员方法不一样,该访问谁就访问谁
2、子类的成员方法与父类的成员方法一样,指的是方法名一样
1)先找子类中,看有没有这个方法,如果有,就直接调用
2)如果子类中没有这个方法,去父类找,如果有,就调用
3)如果连父类都没有这个方法,报错
class Fu{
public int xiangJia(int a,int b){//父类的成员方法返回两个数的和
return a+b;
}
}
class Zi extends Fu{
public int xiangJian(int a, int b){//子类的成员方法返回的是两个数差
return a-b;
}
public int xiangJia(int a,int b){//子类与父类相同的方法,返回的是两个数和的两倍
return (a+b)*2;
}
}
public class Text3 {
public static void main(String[] args) {
Zi zi = new Zi();//创建子类对象
int a=10;
int b=20;
int i = zi.xiangJia(a, b);//调用方法此时子类自己的成员方法
System.out.println(i);
int i1 = zi.xiangJian(a, b);//调用与父类同名的方法
System.out.println(i1);
}
}
8:super关键字
1:概念
super代表是父类存储空间的标识(引用)(可以操作父类的成员)
2:this与super的区别?
this代表的是当前对象的引用
super代表是父类存储空间的标识(引用)(可以操作父类的成员)
3:this与super的用法
1、调用成员变量:
this.成员变量 调用的是本类中的成员变量
super.成员变量 调用的是父类的成员变量
2、访问构造方法(马上说到子父类构造方法的问题来说)
this(...) 调用本类中构造方法 super(...) 调用父类中构造方法
3、访问成员方法
this.成员方法 调用本类的成员方法
super.成员方法 调用父类的成员方法 */
class Fu{
int a=10;
public Fu() {
System.out.println("这是父类的构造方法");
}
public void fu(){
System.out.println("这是父类的成员方法");
}
}
class Zi extends Fu{
int a=20;
public Zi() {
System.out.println("这是子类的构造方法");
}
public void zi(){
System.out.println("这是子类的成员方法");
}
public void show(){
super.fu();//调用父类的成员方法
this.zi();//调用子类的成员方法
int a=0;
System.out.println(a);//方法本身的变量局部变量
System.out.println(this.a);//调用成员变量
System.out.println(super.a);//调用父类的成员方法
}
}
public class Text3 {
public static void main(String[] args) {
Zi zi = new Zi();//创建对象
zi.show();//调用方法
}
}
9:方法重写与重载
1:方法的重写
override 子类中出现了和父类中一模一样的方法声明,叫做重写,也被叫做方法的覆盖,方法的复写
2:方法的重载
overload 本类中出现了方法名一样,参数列表不一样的方法,与返回值无关的方法,叫重载