学习java中的继承

来源:互联网 发布:用友网络股票行情走势 编辑:程序博客网 时间:2024/06/05 20:38

面向对象三大特性----封装、继承、多态,封装自不用 说,继承可以看做是多态的基础,因而继承的重要性不言而喻。作为一个初学者,我把自己学习java继承的心得和总结记录下来,希望请大家多指教。

首先什么是继承呢:

举个例子来说,有这么几个类,学生类/老师类/工人类...他们有公同的属性(如姓名/年龄),有共同的方法(吃饭睡觉),这样,在定义每个类的时候,
你都要将这些代码重写一遍,会很麻烦。

你可以写一个人类,将这些共同的属性方法写在这里,这样,再使得这个人类和其他类发生一个关系,使得人类中的东西可以被其他类使用。

这就是继承,它提高了代码的复用性。


继承的格式:
class Fu{} //父类
class Zi extenfs Fu{}  //子类,extends关键字

继承有什么好处呢:
1.提高了代码复用性
2.提高代码维护性
3.让类与类之间产生关系,是多态的前提

java中类的继承特点:
1.java中只能单继承,不能多继承。(有些语言支持多继承,格式:类 extends 类1,类2...)
2.java中有多层继承(继承体系) 如:儿子继承父亲类,父亲类可以再继承爷爷类。即,父类可以再有父类。

我觉得还应该注意下面的几个问题:
1.子类只能继承父类非私有的成员(变量和方法),private修饰的不行。
但应该注意一点,子类使用父类的public方法,而public方法使用了父类的private成员,这是可以的。
2.子类不能集成父类的构造方法,但是可以通过super关键字去访问父类的构造方法。

3.不要为了部分功能去继承。继承一些不必要的东西,可能要造成麻烦。


那么,什么时候去使用继承呢?
继承是一种“is a”的关系:

老师
学生 
学生是人,老师是人。 这就是继承体现的关系。子类是父类的一种。
采用假设法。

只要A是B的一种,就可以把A继承于B。


继承中构造方法的关系:构造方法谈不上继承不继承,创建子类的对象,会自动调用父类的构造方法
A:子类中所有的构造方法都会默认访问父类中空参数的构造方法
为什么呢?因为子类继承父类的数据,可能还会使用父类的数据,所以,子类初始化之前,一定要完成父类数据的初始化。
B: 注意m:子类内一个构造方法第一条语句默认都是:super();来默认访问父类的构造方法。
C: 如果父类没了无参构造方法呢?会报错的。怎么办呢?
1.可以自己写一个。这也是为什么我们都要自己写一个无参构造方法的原因之一。
2.用super 显示的去访问父类的构造方法,父类构造方法要什么参数,就用super传什么。
3.还可以在子类的一个有参数构造方法中用this();调用本类的无参数构造方法,再用无参数构造方法中用super(...);去访问父类构造方法。

继承中成员方法的关系:
A:父类与子类方法名相同,怎么办?这时会调用子类的这个方法,就近原则。
这叫方法的重写,也叫方法覆盖,方法复写。父类与子类中出现了完全相同的方法声明,这时候会用子类自己的方法。

B: 方法重写的应用:
例如:

class Phone{public void call(String name){System.out.println("gei"+name+"dadianhua");}}class NewPhone{public void call(String name){//System.out.println("gei"+name+"dadianhua");             //***super.call(name);                                         //***这样可以实现同时使用了父类的同名方法System.out.println("ting天气预报");}}class Demo{public static void main(String[] args){NewPhone nn=new Newphone();nn.call("习大大");}}


C: 方法重写的注意事项:
1.父类中的私有方法不能被重写,本来就不能被继承,当然不能被重写。
2.子类重写父类方法时,访问权限不能更低!默认修饰符比pubilc低。
3.父类中是静态方法,子类覆盖时也只能是静态方法。(其实这根本不是个方法重写,多态中再说。)
4.因此,方法重写时候,子类和父类中方法最好一致。


class Fu{int num;public Fu(String name){}}class Zi extends Fu{public Zi(){}public Zi(String name){super("小王");//默认}}class Domo{public static void main(String[] args){Zi ss=new Zi("小王");   }}

1 0
原创粉丝点击