
继承式子类与父类的继承,实现是接口的实现。
使用继承,可以减少代码量,常用方法可以不必定义,而是直接继承父类定义好了的方法,提高编程效率。体现了软件的三特性之一的可复用性。
使用接口,只定义方法,没有具体的方法体,实现该接口的类可以对接口中的方法灵活的根据实际情况定义,很好的是程序具有灵活、复用的特性。
通过extends进行继承。
语法:<修饰符>class<子类名>extends<父类名>{}
举例:
public class Parent{//定义父类}
public class Son extends Parent{//通过extends,son类继承了父类Parent
}
补充:
(1)继承就是在现有类的基础上构建亲的类。
(2)当一个类继承一个现有类后,可以对被继承类中的属性和方法进行重用。
(3)在Java中,一个类只能有一个父类,不支持多继承。
注意:类Circle的构造方法:
protected double radius;
public Circle(double r,int a,int b)
{
super(a,b);
radius=r;
Systemoutprintln("circle constrator:"+thistostring());
}
可以写成:
protected double radius;
public Circle(double r,int a,int b)
{
x=a;
y=b;
Systemoutprintln("point constrator:"+thistostring());
radius=r;
Systemoutprintln("circle constrator:"+thistostring());
}
可以理解为super(a,b)作用就是把父类的构造方法原封不动地搬过来用了。用的所有变量方法都是他自己的。他自己改了就调用他自己的,他没改那就用父类的。调用super的时候,这里只有一个对象,就是从子类产生的对象,this当然指的是子类了。如果按照你的结果来说的话,那哪个对象产生
point constrator:[72,29]
point constrator:[5,5]
这两条结果呢。
不过这个概念确实不容易理解,多思考思考,模拟模拟,就清晰了。
好运!~
以下都把A作为父类,B作为子类。
1,一个一个说,如果任何A的方法(包括public和protected)都不重载,那么继承是毫无意义的。
A和B此时是等同的,任何使用B的地方都可以使用A,任何使用A的地方都可以使用B。继承就是为了发扬光大,扩展功能的。
2,如果A有一个getConnection方法,B可以不必重载这个方法,但是B可能会重载connect方法,对连接的这一行为加以重新定义。那么下面代码:
A a = new A()
B b = new B();
aconnect()和bconnect()的行为不同
但是agetConnection()和bgetConnection()行为相同。对于对象方法(非static)必须通过new的对象来调用,不必new对象的说法是不对的,但是不必new父类的对象。
B b = new B(); bconnect();
继承是为了发扬光大,增加功能,同时还有一个明显的好处,就是上一代已经完成的功能,不必再重新实现一遍了,可以拿过来直接用。
继续说:
3,抽象类和接口,放在一起说:
首先是抽象类为啥一定要实现。凡是继承了某个抽象类的子类,如果自身不声明成也是抽象的话,就必须实现父类的所有抽象方法。这是语法的一个规定,抽象类不能new对象,不能new对象的东西,基本没啥用(你可能会说,我用static方法啊,静态方法是脱离了OO概念的,面向对象程序设计是提供一个舞台,各种对象在活动,你方唱罢我登场。static方法不需要对象,通常只用作一些工具类,比如math,可以说任何math对象的正弦函数实现都是一样的,只有满足这个条件,才能作为静态方法出现。)
因此作为抽象类的子类,有责任实现上一代的未竞事业。举个例子:
定义抽象类Bird,声明抽象方法jiao(),这个方法和具体是什么鸟有关(子类需要实现),并且和鸟的自身状态有关(对象方法,而不能是静态方法)。所以每个鸟的子类:Duck, Chicken
Goose都需要实现,哪怕只是一句:Systemoutprintln("Ga Ga");也是需要实现的。
java之所以有接口这个东西,很大一部分原因是java不支持多重继承,即一个类的的父类只能是一个,这样束缚了它的扩展性,好处是降低了复杂性。
应该这样理解接口,事物是复杂的,有主要属性,往往还有一些附加属性和方法。接口定义了一组行为集合,带有这类附加属性的类,往往在实现了主要属性的抽象方法后,还会实现附加的属性。
这里用我们最经常使用的String类做个例子:String类直接派生自Object类,即java的最顶层类,实现了对于字符序列的抽象。不过string还有一个很容易想到的附加属性,就是比较两个字符串的大小,这在排序中是很有用的。因为已经继承了Object类,无法再继承其他类,这就需要通过接口来实现:
public interface Comparable<T>
{
}
可以很轻易的想到:Double Integer还有好多类型都有相互比较的行为,这些类型之间或许有联系,不过大部分是没有什么必然联系。比如你定义Human类,Human的不同对象之间也有比较的行为,而且相当复杂,这些没有什么必然联系的类型却有同一种类似的行为——互相比较,这个用抽象类显然不合适,这里就是用接口最合适的地方。
抽象类集中了某一类东西的共同特征,接口却可以让他们分开——你自己愿意是什么就是什么,只要你遵循“契约”,你就可以拥有我的行为。
类似的例子还有:无论你是工人,农民,还是学生,或者什么人,都可以实现“驾驶”这一行为,
无论是Button,table,甚至布局,都可以实现一个onClickListener。
你调用的print语句是父类中的print
其中thisb就是父类中的b
同理,thisc也就是父类中的c
而print打印的是父类中的a b c的值
你的确按照树上说的定义了一个与父类同名的变量a
但是你却没有用到这个字类中的a
所以还是打印1 2 3
明白??
在子类的构造方法里,第一句必须得调用父类的构造方法,如果父类有无参构造方法或者没有写构造方法(默认是无参),此时子类可以省略不写,这里系统会自动调用父类的无参构造方法,即相当于写了一句:super();如果父类没有无参构造,而是手动写的有参构造方法,那么子类必须显示的调用它,super(参数);你的程序就是少了这个,在子类的构造方法中加上super(String,int,int);调用一下就行了,或者在父类中加上一个无参构造也可以。
以上就是关于java中继承和实现有什么区别,分别给程序带来了怎样的好处请教~~全部的内容,包括:java中继承和实现有什么区别,分别给程序带来了怎样的好处请教~~、java子类如何继承父类怎么写啊、关于JAVA的继承等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)