继承extends

本文详细介绍了Java中的继承特性,包括子类继承父类的属性和方法、代码复用与维护性提升、super关键字的使用以及构造方法和成员方法的访问特点。通过实例展示了方法重写和@Override注解的应用,强调了继承中的注意事项,如子类不能重写父类的私有方法。同时,文章还探讨了Java单继承的特性及其在实际编程中的应用。
摘要由CSDN通过智能技术生成

继承:是面向对象的三大特征之一,可以使子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

格式:public class 子类名 extends  父类名{  }

父类:又称为基类、超类,子类:又称为派生类

继承中子类的特点:子类可以有父类的内容,子类也可以有自己特有的内容;

继承的好处:

(1)提高了代码的复用性(多个类相同的成员可以放到同一个类中);

(2)提高了代码的维护性(方法的需要修改时,只需要修改父类中的一处即可);

继承的弊端:削弱了子类的独立性

当两个类A和B,满足A是B的一种时,或者B是A的一种时,就说明他们存在继承关系,这个时候可以考虑用继承来实现,否则不能滥用继承。

举例:苹果和水果,猫和动物,iPad和计算机等

继承中变量的访问特点:

在子类方法中访问一个变量时,首先是在子类方法的局部范围内找,然后在子类成员范围内找,最后在父类成员范围内找。如果父类中没有就会报错,注意不考虑父类的父类......

super关键字:

super关键字的用法和this关键字的用法相似,this代表本类对象的引用,super代表对父类对象的引用。

关键字访问成员变量访问构造方法访问成员方法
this

this.成员变量

访问本类成员变量

this(...)

访问本类构造方法

this.成员方法(...)

访问本类成员方法

super

super.成员变量

访问父类成员变量

super(...)

访问父类构造方法

super.成员方法(...)

访问父类成员方法

继承中构造方法的访问特点:

子类中所有的构造方法默认都会访问父类中无参的构造方法,因为子类会继承甚至是有父类中的数据,所以在子类初始化之前都需要先完成父类数据的初始化,可以理解为每个子类构造方法的额第一条语句默认为super()。

如果父类中没有无参构造方法,只有带参构造方法,可以通过(1)使用super关键字去调用父类的带参构造方法;(2)在父类中提供一个无参构造方法,更推荐后者。

继承中成员方法的访问特点:

通过子类对象访问一个方时,首先是在子类成员范围(子类成员方法)内找,然后在父类成员范围(父类成员方法)内找。如果父类中没有就会报错,注意不考虑父类的父类......

方法重写:

方法重写就是子类中出现了和父类中一模一样的方法声明,当子类需要父类的功能,而功能主题子类有自己特有的内容时,可以重写父类中的方法,这样既沿袭了父类的功能,又定义了子类特有的内容。

@Override:是一个注解,可以帮助我们检查重写方法的方法声明的正确性。

示例:

public class Phone {
    public Phone(){
        System.out.println("调用Phone的构造方法!");
    }
    public void call(String name){
        System.out.println("给"+name+"打电话!");
    }
}
public class NewPhone extends Phone {
    public NewPhone(){
        System.out.println("调用NewPhone的构造方法!");
    }
    @Override
    public void call(String name){
        System.out.println("开启视频功能!");
        super.call(name);
    }
}
public class Phone_test {
    public static void main(String[] args) {
        Phone p = new Phone();
        NewPhone np = new NewPhone();
        String name = "pjh";
        p.call(name);
        System.out.println("============");
        np.call(name);
    }
}

方法重写的注意事项:

(1)父类中的私有方法不能被重写(父类的私有成员子类是不能被继承的)

(2)重写方法时,子类方法的访问权限应该比父类方法的访问权限高(publi>默认>私有)

Java中继承的注意事项:

Java中类只支持单继承,不支持多继承,但是支持多层继承。

person-teacher-studen案例:

package extend_practice;
//person class
public class person {
    private String name;
    private String age;

    public person() {
        System.out.println("调用person类!");
    }

    public person(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

package extend_practice;
//teacher class
public class teacher extends person {
    public teacher(){
        System.out.println("调用teacher类!");
    }
    public void teach(){
        System.out.println("春蚕到死丝方尽,蜡炬成灰泪始干。");
    }
}
package extend_practice;
//student class
public class student extends teacher {
    public void learn(){
        System.out.println("好好学习,天天向上!");
    }
}
package extend_practice;
//person-teacher-student test class
public class per_tea_stu_test {
    public static void main(String[] args) {
        teacher tea = new teacher();
        tea.setName("ljt");
        tea.setAge("50");
        System.out.println("teacher:"+tea.getName()+", "+"age:"+tea.getAge());
        student stu = new student();
        stu.setName("tjs");
        stu.setAge("22");
        System.out.println("student:"+stu.getName()+", "+"age:"+stu.getAge());
        tea.teach();
        stu.learn();
        stu.teach();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值