java三大特性之一继承

Posted robinson-coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java三大特性之一继承相关的知识,希望对你有一定的参考价值。

继承

众所周知,java是跨平台,健壮性的语言

他拥有封装,继承,多态三大特性

继承:

首先,子类继承父类之后,子类可以拥有父类的的方法,构造方法不能被继承

使用场景:

如果我们定义好几个类,每个类都拥有相同的方法或者参数,

然后我们就可以抽取相同的内容为父类,然后子类继承父类的参数或者方法,极大的提高了

代码的复用性,减少了我们的工作量

范例:

public class Demo {
    public static void main(String[] args) {
        teacher t = new teacher();
        t.name = "张三";
        t.age = "32";
        t.eat();
        t.teaching();

        Students s = new Students();
        s.name = "王二";
        s.age = "18";
        s.eat();
        s.learning();
    }
}

class teacher{
    String name;
    String age;
    public void eat(){
        System.out.println(name + "吃饭");
    }
    public void teaching(){
        System.out.println(name + "教书");
    }
}

class Students{

    String name;
    String age;

    public void eat(){
        System.out.println(name +"吃饭");
    }
    public void learning(){
        System.out.println(name +"学习");
    }
}

 

学生和老师都拥有姓名和年龄,以及吃饭的功能,但是老师特有的方法教书,以及学生特有的方法学习,运行结果如下:

技术图片

所以呢,我们抽取相同的参数以及方法,然后把代码优化一下
public class Demo {
    public static void main(String[] args) {
        teacher t = new teacher();
        t.name = "张三";
        t.age = "32";
        t.eat();
        t.teaching();

        Students s = new Students();
        s.name = "王二";
        s.age = "18";
        s.eat();
        s.learning();
    }
}
class people{
    String name;
    String age;
    public void eat(){
        System.out.println(name + "吃饭");
    }
}
class teacher extends people{


    public void teaching(){
        System.out.println(name + "教书");
    }
}

class Students extends people{

    public void learning(){
        System.out.println(name +"学习");
    }
}

我们抽取了一个父类人,人拥有姓名,年龄,吃饭的属性以及行为,不同职业只需要继承父类人这个父类,便拥有了父类的功能,新增加的功能,教书以及学习特有的方法,直接体现在子类中就可以了,执行结果相同

技术图片

所以呢,在实际开发者善用分析抽取相同的内容,可以极大的提高了我们的开发效率,减轻我们搬砖的难度

现在我们说一下java继承的限制,java只支持单继承,不支持多继承,一个子类只能继承一个父类,但是可以多层继承,白话就是一个儿子只能认一个爹,不能认多个爹,你爹可以给你在认个爹,也就是你爷爷,再往上太爷爷,祖爷爷

用代码解释一下

class A{
    //你太爷爷
}
class B extends A{
    //你爷爷
}
class C extends B{
    //你爹
}
class D extends C{
    //
}

下面我们说一些方法的重写:

当子类拥有父类一样的方法时,这时候子类不在继承父类的方法,而是子类重写父类的方法

通过重写方法,可以达到增强方法,扩展功能,我们用代码看一下

public class Demo {
    public static void main(String[] args) {
        iPhone7 s1 = new iPhone7();
        s1.gongnneg();
        System.out.println("***************************************");
        iPhoneX s2 = new iPhoneX();
        s2.gongnneg();
    }
}
class iPhone7{

    public void gongnneg(){
        System.out.println("打电话");
        System.out.println("发短信");
    }


}
class iPhoneX extends iPhone7{
    public void gongnneg(){
        System.out.println("打电话");
        System.out.println("发短信");
        System.out.println("上网");
    }
}

子类通过重新写父类方法,增加了方法,添加了上网功能,同事还保留了打电话,发短信功能

-技术图片

最后我们来说一下局部变量,成员变量,父类变量访问的问题

这里需要用到两个关键字,this和super

this:本类的成员

访问本类的成员变量: this.变量名
访问本类的成员方法: this.成员方法名
访问本类的构造方法: this(参数)

注意:
1.用this访问构造方法,this要在第一行,super写出来也要在第一行,所以冲突,一山不容二虎
2.本类的构造方法之间不能相互调用

总结:想在子类中使用父类的成员用super
想使用本类的成员可以使用this

代码展示:

public class Demo {
    public static void main(String[] args) {
        demo2 d = new demo2();
        d.test();
    }
}
class demo1{
    int num = 10;
    public void test() {
        System.out.println(num);
    }


}
class demo2 extends demo1{
    int num = 20;
    public void test(){
        num = 30;
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
}

看结果

技术图片

num 访问方法内部的局部变量

this.num访问本类的成员变量

super访问父类成员变量

以上是关于java三大特性之一继承的主要内容,如果未能解决你的问题,请参考以下文章

第9章 Java类的三大特性之一:继承

理解java的三大特性之继承

Java提高篇之理解java的三大特性——继承

浅谈Java三大特性之继承

探讨 java 的三大特性之一:继承

java随笔:三大特性之继承