java中继承的特点

Posted 张政

tags:

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

java中继承的特点
  继承是java中很重要的一个应用.那么,为什么要有继承呢?我们可以看一个实例:猫类和狗类.猫和狗是生活中常见的动物,它们有哪些共性呢?都有颜色(黑白黄花等),都有腿,都要吃饭,都要睡觉等.那么,颜色和腿的数量就是它们的属性(成员变量),吃饭和睡觉是它们的行为(功能).如果没有继承,分别写猫类和狗类,如下:

public class Cat{           //猫类
    String color ;//  成员变量"颜色"
    int num;  //   成员变量"腿的个数"

    class Cat (){}   //无参构造
    class Cat(String color,int num) { //有参构造
        this.color = color;
        this.num = num;
    }

    public void setColor(String color) { //set方法
        this.color = color;
    }
    public String getColor() { //get方法
        return color;
    }
    public void setNum(int num) {
        this.num= num;
    }
    public int getNum() {
        return num;
    }
}

 

狗类和猫类除了类名不一样,其他的都一样,写起来很浪费时间,也浪费内存.因此,用继承可以提高代码的复用性.这和java的跨平台道理差不多,都是为了节约和方便.
  那么,在java中,具体怎么继承呢?就是让类于类之间产生关系,产生父子类关系.也就是说两个类之间一个属于另一个,就可以继承.就像猫和狗,毛不属于狗,狗不属于猫,它们俩没法继承.但是猫属于动物,狗也属于动物.动物和猫之间就可以建立继承关系.同样,动物与狗之间也可以建立继承关系.这样,动物类的一般属性和行为,猫和狗类就继承了.
  java的继承中,也有一些自己的特点.第一:这种继承是单继承的关系,不支持多继承.单继承就是说一个爹可以有多个儿子,但是一个儿子只能有一个爹.多继承就是说一个徒弟可以有很多师父(孙悟空就有两个师父,一个是菩提老祖,一个是唐僧.孙悟空继承了菩提老祖的部分武艺,又跟着唐僧学做人,最后才成佛).两种继承各有各的特点,单继承呈现树状结构,比较安全.多继承呈现网状结构,随意性比较大,不太安全.Java就是选择了单继承.同时,这种继承关系是可以延续下去的,就像爷-父-子-孙这种情况,java中也是这样,叫多层继承.
  第二:父类私有的成员不能继承,父类的构造方法不能继承,别的都可以继承.为什么私有的不能继承呢?因为我们要充分尊重别人的隐私,哪怕这个人是你的父亲或儿子或妻子.父类让你继承,你才可以继承,父类隐藏起来的,不想让你继承的,你就不能继承.当然,也不能抢.另外,父类的构造方法也不能继承,因为构造方法有两个作用.一是对本类成员的初始化,构造方法名和本类名相同,如果继承的话,和子类名都不一样,容易搞混.二是内含super()默认访问父类的无参构造方法.所以,子类和父类各有各的构造方法,但是子类又靠自己的构造方法默认访问父类的构造方法,相当于家谱中的血缘关系,是一条无形的纽带.自然界的万物都是有归属有继承的,java中同样如此,每个类都有继承的父类,如果没有,就是默认继承Object类.
  除此之外,子类不仅要继承父类,还要有所发展,所谓青出于蓝而胜于蓝.具体到java中的继承,体现为方法的重写,也就是在子类中建立一个方法,和父类方法名一样,但又有自己独特的内容,这样一方面通过继承可以沿袭父类的功能,同时又有自己的新功能.那么在方法重写中又有那些要求呢?第一:父类的私有方法不能被重写,因为根本就没有继承,也就没有重写的基础.第二:重写的方法,访问权限不能更低.好的东西要学会分享,这样才能壮大.下面我们用猫类和狗类案例结束.

/*
第一步:建立一个父类:动物类
*/
class Animal{           //动物类
    String color ;//  成员变量"颜色"
    int num;  //   成员变量"腿的个数"

    public Animal(){}   //无参构造
    public Animal(String color,int num) { //有参构造
        this.color = color;
        this.num = num;
    }

    public void setColor(String color) { //set方法  设置"颜色"
        this.color = color;
    }
    public String getColor() { //get方法  得到"颜色"
        return color;
    }
    public void setNum(int num) {  //set方法 设置"腿的条数"
        this.num= num;
    }
    public int getNum() {    //get方法 得到"腿的条数"
        return num;
    }
    public void show() {       //展现动物类的属性
        System.out.println(getColor()+"..."+getNum());
    }
    public void eat () {
        System.out.println("吃饭");
    }
}
/*
第二步:建立两个子类,分别是猫类和狗类
*/
class Cat extends Animal{
    public Cat (){}   //无参构造
    public Cat(String color,int num) { //有参构造
        this.color = color;
        this.num = num;
    }

    public void catchMouse() {    //猫特有行为:抓老鼠
        System.out.println("抓老鼠");
    }
}
class Dog extends Animal {
    public Dog (){}   //无参构造
    public Dog(String color,int num) { //有参构造
        this.color = color;
        this.num = num;
    }

    public void watchHome() {    //狗特有行为:看家
        System.out.println("看家");
    }
}
/*
第三步:建立测试类进行测试
*/
public class TestAnimal{
    public static void main(String[] args) {
        Cat c1 = new Cat("黄色",4);    //创建对象
        c1.show();       //调用父类
        c1.eat();        //调用父类
        c1.catchMouse();   //调用子类
        System.out.println("++++++++++++++++");
        Dog d1 = new Dog("白色",4);    //创建对象
        d1.show();       //调用父类
        d1.eat();        //调用父类
        d1.watchHome();   //调用子类
    }
}

 






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

探讨 JS 的面向对象中继承的那些事

java中继承的关系

C++和Java中继承的个人感觉

java中的继承定义。

JavaScript中继承的实现

JavaScript中继承的实现方式