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中继承的特点的主要内容,如果未能解决你的问题,请参考以下文章