Java——继承
目录
继承中子类的特点:可以有父类的内容,还可有自己特有的内容。
继承的优缺点:
优点:
①提高了代码的复用性(多个类相同的成员可以放到同一个类中);
②提高了代码的维护性(若方法的代码需修改,修改一处即可)。
缺点:继承让类与类之间产生了关系,类的耦合性增强,当父类变化时子类也要跟着变化,削弱了子类的独立性。
使用继承的情况:两个类A、B,满足A是B的一种,或B是A的一种,则A和B存在继承关系。
继承中变量访问特点
/*
测试类
*/
public class Demo {
public static void main(String[] args){
Son s = new Son();
s.show();
}
}
/*
父类
*/
public class Father {
public int age = 40;
}
/*子类*/
public class Son extends Father {
public int height = 170;
public int age = 20;
public void show(){
int age = 30;
System.out.println(age);
System.out.println(height);
}
}
super关键字
关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 |
this | this.成员变量,访问本类成员变量 | this(…),访问本类构造方法 | this.成员方法(…) |
super | super.成员变量,访问父类成员变量 | super(…),访问父类构造方法 | super.成员方法(…),访问父类成员方法 |
/*
子类
*/
public class Son extends Father {
public int age = 20;
public void show(){
int age = 30;
System.out.println(age);
//访问本类的成员变量age
System.out.println(this.age);
//访问父类的成员变量age
System.out.println(super.age);
}
}
继承中构造方法访问特点
/*
父类
*/
public class Father {
public Father() {
System.out.println("父类中无参构造方法被调用");
}
public Father(int age) {
System.out.println("父类中带参构造方法被调用");
}
}
/*
子类
*/
public class Son extends Father {
public Son(){
//super();
super(20);
System.out.println("子类中无参构造方法被调用");
}
public Son(int age){
//super();
super(20);
System.out.println("子类中带参构造方法被调用");
}
}
/*
测试类
*/
public class Demo {
public static void main(String[] args){
Son s = new Son();
Son s2 = new Son(20);
}
}
继承中成员方法访问特点
/*
父类
*/
public class Father {
public void show(){
System.out.println("父类中show方法被调用");
}
}
/*
子类
*/
public class Son extends Father {
public void method(){
System.out.println("子类中method方法被调用");
}
public void show(){
super.show();
System.out.println("子类中show方法被调用");
}
}
/*
测试类
*/
public class Demo {
public static void main(String[] args){
Son s = new Son();
s.method();
s.show();
//s.text();//不存在该方法,报错
}
}
方法重写
/*
手机类
*/
public class Phone {
public void call(String name){
System.out.println("给"+name+"打电话");
}
}
/*
新手机类
*/
public class NewPhone extends Phone {
public void call(String name){
System.out.println("开启视频");
super.call(name);
}
}
/*
测试类
*/
public class PhoneDemo {
public static void main(String[] args){
Phone p = new Phone();
p.call("zhangsan");
NewPhone np = new NewPhone();
np.call("lisi");
}
}
私有方法不能重写(父类私有成员子类不能继承)
子类方法全新啊不能更低(public > 默认 > 私有)
/*
父类
*/
public class Father {
private void show(){
System.out.println("父类中show方法被调用");
}
public void method(){
System.out.println("父类中method方法被调用");
}
}
/*
子类
*/
public class Son extends Father {
/*
//私有方法不能重写(父类私有成员子类不能继承)
@Override
private void show(){
super.show();
System.out.println("子类中show方法被调用");
}
*/
//子类方法全新啊不能更低(public > 默认 > 私有)
void method(){
System.out.println("子类中method方法被调用");
}
}
继承的注意事项
Java中类只支持单继承,不支持多继承
Java中类支持多层继承
/*
母亲类
*/
public calss Mother {
public void dance(){
System.out.println("母亲类");
}
}
/*
爷爷类
*/
public class Granddad {
public void drink(){
System.out.println("爷爷类");
}
}
/*
父亲类
*/
public class Father extends Granddad {
public void cook(){
System.out.println("父亲类");
}
}
评论