继承
定义:继承是面向对象的三大特征之一(封装,继承,多态),可以让子类继承父类的属性和方法。
父类:(基类,超类)
子类:(派生类)
格式:
public class 子类名 extends 父类名{
}
父类:
package extend;
public class father {
int age = 20;
String f_name = "zhang";
public father(){//构造方法,可写可不写
System.out.println("father无参构造方法");
}
public father(int age ){
System.out.println("father带参构造方法:"+age);
}
public void play(){//父类中的方法
System.out.println("游戏真好玩");
}
}
子类:子类继承父类属性,若子类与父类名相同则用自己的变量
这时可以用super.父类变量
super.(属性,方法,构造方法)表示访问父类的,
this表示本类的(应用于局部变量和成员变量里)
package extend;
public class son extends father{
int age = 12;
public son (){
System.out.println("son无参构造方法");
}
public void eat(){//子类中方法
System.out.println("我需要次");
//子类直接调用了父类的属性
System.out.println(f_name);
//子类用super调用与父类同名的变量
System.out.println(super.age);
}
}
测试类:
package extend;
public class test {
public static void main(String[] args) {
father p = new father();//父类实例化对象
//子类实例化会先调用父类的无参构造
son s = new son();//子类实例化对象
System.out.println(p.age);//调父类属性
s.eat();
//由于子类继承了父类,所有子类可以调用了父类方法
s.play();
}
}
结果
构造方法特点:
子类在初始化之前,都会先完成父类数据的初始化,所有先调用父类的无参构造方法:推荐代码有参构造方法都写无参构造方法,否则没有
对super的调用必须是构造器中的第一个语句
好处:提高代码复用性,和维护性,修改父类代码,子类都改变了
缺点:修改父类代码,子类都改变了,耦合性增加,子类独立性减弱
一般情况下使用小类继承大类,狗继承动物,儿子继承父亲;
方法重写(在继承关系中):
@Override:检测方法重写正确性:
父类:
package extend;
public class father {
int age = 20;
String f_name = "zhang";
public void play(){
System.out.println("游戏真好玩");
}
}
子类:
package extend;
public class son extends father {
int age = 12;
//对父类中play()方法重写了
public void play() {
System.out.println("我需要次");
//System.out.println("游戏真好玩");
super.play();//同上一行代码效果一样
}
}
测试类:
package extend;
public class test {
public static void main(String[] args) {
father p = new father();
son s = new son();
s.play();
}
}
总结:不能重写私有的方法;重写写权限不能比父类方法权限低(public >默认> private)
继承:一个类只能继承一个父类,但是可以多层继承,A继承B继承C,A就可以使用C中属性和方法。争对不能多继承,接口解决了