java中继承

作者: 小漫画ing | 来源:发表于2019-02-17 16:58 被阅读0次
  • 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
  • 通过关键字extends就可以实现;
  • 单独的这个类称为父类,基类或者超类;这个类可以称为子类或者派生类。
  • 有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,还可以定义自己的新成员;
package cn.manman.com;
class Student {
    String name;
    int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void eat(){
        System.out.println("吃饭");
    }
}
class Teacher{
    String name;
    int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

通过观察上一段代码,我们发现代码的复用性很低,无论你的职位是什么,只要是人,都得吃饭,那么是不是老师可以利用学生的特征,提高代码的复用性呢?

package cn.manman.com;

public class person {
    String name;
    int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

首先我写了一个person类,不管你的职业是什么,都要吃饭,所以给了一个吃饭的方法。

package cn.manman.com;

public class Student  {
    public static void main(String[] args) {
        stu s=new stu();
        s.eat();
        s.study();
    }
}
class stu extends person{
    public void study(){
        System.out.println("学习");
    }
}

然后我接着写了一个学生类,学生在上面基本类的基础之上,还要学习,我利用java里面的继承,这样吃饭的代码就不用再次出现,这样就提高了代码的复用性,无论要写一个工人类还是老师类,都可以继承我的person类。


结果

继承的好处和弊端

  • 好处:
    提高了代码的复用性
    提高了代码的维护性
    让类与类之间产生了关系,是多态的前提;
  • 弊端:
    类的耦合性增强了;
    开发的原则本来是:低耦合,高内聚;
    耦合:类与类之间的关系
    内聚:就是自己完成某件事情的能力;

继承的特点

  • java只支持单继承,不支持多继承;
  • 但是可以多层继承;

继承的注意事项

  • 子类 只能继承父类所有非私有的成员(成员方法和成员变量)
package cn.manman.com;

public class jicheng {
    public static void main(String[] args) {
        Son son=new Son();
        son.show();
        //son.method();//不可以继承
    }
}
class Father{
    private int num=10;
    public int num1=20;
    private void method(){
        System.out.println(num);
        System.out.println(num1);
    };
    public void show(){
        System.out.println(num);
        System.out.println(num1);
    };
}
class Son extends Father{
    
}

子类不可以继承私有的方法;

  • 子类不能继承 父类的构造方法,但是可以通过super关键字去访问父类的构造方法
  • 不要为了部分功能而去继承

继承中成员变量的关系

通过前面的学习,我们知道类的组成是:成员变量,构造方法,成员方法;但是我们现在学习了继承,我们来思考一下,类的组成部分的各自关系是什么?

  • 继承中成员变量的关系
    1、子类中成员变量和父类中的成员变量名称不一样
    2、子类中成员变量和父类中的成员变量名称一样时,遵循 就近原则;
package cn.manman.com;
//继承中成员变量的关系
public class leiguanxi {
    public static void main(String[] args) {
        Son1 son=new Son1();
        son.show();
    }
}
class Father1{
    public int num=10;
}
class Son1 extends Father1{
    public int num=40;
    public int num2=20;
    public void show(){
        System.out.println(num);
        System.out.println(num2);
    }
}

接下来看,我想输出局部范围和成员范围的num,我们可以通过使用关键字this

package cn.manman.com;
//要求是:不仅要输出局部范围的num,还要输出成员变量num
public class leiguanxi {
    public static void main(String[] args) {
        Son1 son=new Son1();
        son.show();
    }
}
class Father1{
    public int num=10; 
}
class Son1 extends Father1{
    public int num=40;
    public void show(){
        int num=20;
        System.out.println(num);
        System.out.println(this.num);//this就代表的是成员变量的num
    }
}
结果

如果我还想在子类中输出父类的变量,可以使用关键字super

package cn.manman.com;
//要求是:不仅要输出局部范围的num,还要输出成员变量num
public class leiguanxi {
    public static void main(String[] args) {
        Son1 son=new Son1();
        son.show();
    }
}
class Father1{
    public int num=10; 
}
class Son1 extends Father1{
    public int num=40;
    public void show(){
        int num=20;
        System.out.println(num);
        System.out.println(this.num);//this就代表的是成员变量的num
        System.out.println(super.num);//super就是代表父类变量的num
    }
}
结果
  • this和super的区别:
    this代表的本类中对应的引用
    super代表父类存储空间的标识(可以理解为父类的引用,可以操作父类的成员)
  • this和super的用法
    1、调用成员变量:
    this.成员变量 调用本类的成员变量
    super.成员变量 调用父类的成员变量
    2、调用构造方法
    this(...) 调用本类的构造方法
    super(...) 调用父类的构造方法
    3、调用成员方法
    this.成员方法 调用本类的成员方法
    super.成员方法 调用父类的成员方法

相关文章

  • 继承

    java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是可实现多接口。 1:成员变量。当子父类...

  • Java初级笔记No.3(更新中)

    2018.7.26 1、Java中的继承 Java中使用extends关键字来说明继承关系。 2、继承的特性 ja...

  • 2.3 继承 (面向对象)

    1、Java中的继承 继承是类与类的一种关系Java中的继承是单继承的,即每个子类只有一个父类 继承的好处子类拥有...

  • JAVA核心技术总结(五六章)继承&接口与内部类

    第五章 继承 在Java中,所有的继承都是公有继承,没有C++的私有继承和保护继承 Java同C++一样,子类不能...

  • Java中的继承

    Java中的继承 Java 继承 什么是继承 继承是用来描述“is-a”的关系;如果说两个对象A和B,若可以描述成...

  • Java中的继承实现方式与执行顺序

    Java中的继承实现方式与执行顺序 概要 本文主要探究如何使用Java中的继承(extends)?以及子父类中,s...

  • java中的私有变量是否可以继承

    java中的私有变量是否可以继承 Java 父类中权限为private的私有变量,子类对象继承后,在其内存中其实也...

  • 类访问权限

    java中仅有单继承,没有多继承。 java中使用super来调用父类中的指定操作: super可以用于访问父类中...

  • 【JAVA】Java中的继承

    0x01 子类可以使用父类的哪些成员 父类的public,子类可以继承 protected也可以继承,不同包也能继...

  • JNI基础 -- C++基础知识(继承多态,虚函数 )

    继承 在Java中类的继承只能是单继承,但是在C++中可以多继承。继承是通过一个冒号表示的,如下: C++中的继承...

网友评论

    本文标题:java中继承

    本文链接:https://www.haomeiwen.com/subject/swdsjqtx.html