您的位置:首页 > 其它

面向对象特性——继承

2015-09-14 22:33 288 查看
继承 (Java中只支持单继承)——>
父类(基类) 子类(派生类)

面向对象编程时,可以通过扩展一个已有的类,并继承该类的属性和方法,来创建一个新的类。

两个类之间存在继承关系:

1.子类拥有父类的所有属性及在父类中声明的属性,在子类内部可以直接调用;

2.子类拥有父类的所有方法,即在父类中声明的方法,子类内部可以直接调用;

3.子类不拥有父类的构造器,如需在子类中使用和父类传入的参数一样的构造器,则需要在子类内部重新声明这些构造器;

4.子类类型是父类类型,即子类类型的对象可以自动转换为父类类型的对象,父类类型的对象则需强制转换为子类的对象,转换语法与基本数据类型相同。

子类实例化对象时,会创建几个对象?

例如:

Bomber类 继承 Plane 类。

Bomber bomber = new Bomber();

子类继承父类时,会自动创建父类的对象,而且会比子类对象先创建。

为什么会自动创建父类对象?

继承 Plane 类时,会继承Plane类的属性和方法,属性的初始化动作在构造器中进行,而且必须实例化对象才能调用构造器。

判断是组合还是继承小技巧:

组合:什么东西是什么东西 has a  
xx有xx

继承:子类有父类属性,又有自己特有属性 is    a
xx是xx (子类是父类)

继承的优点:

1.代码的可复用性;

2.设计应用程序变得更简单;

3.父类的属性和方法可用于子类;

4.子类可以扩展父类的属性和方法。

Java中只允许单继承的原因:

多继承易引发意义不明确,增加了程序员编程的复杂度,甚至进一步影响多态的灵活性。

所有类的根类:Object

Object常用方法:

public final class getClass();

public int hashCode();

public boolean equals(Object x);

protected Object clone() throws Throwable;

public String toString();

protected void finalize() throws Throwable;

public final void notify();

public final void wait() throws InterruptedException;

注:一个若没有继承任何类,则默认继承Object类。

方法重写(覆盖)<是重
a86c
写父类的方法,必须在继承里>


概念:

当一个子类继承一个父类,它同时继承了父类的属性和方法。子类可以直接使用父类的属性和方法,如果父类的方法不能满足子类的需求,

则可以在子类中对父类的方法进行重新实现。

方法重新的规则:

1.重写方法的参数列表,必须和被重写方法完全相同;

2.重写方法的返回值类型必须和重写的方法的返回值类型一致;

3.重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public > protected > default > private);

4.重写方法所抛出的异常必须和被重写的方法所抛出的异常一致,或者是改异常的子类;

5.被重写的方法访问修饰符不能为 private;

6.静态方法不能被重写为非静态方法,会导致编译出错。

方法重写和重载的区别:

① 重写必须继承,重载不需要;

② 重写的方法名,参数数目相同,参数类型相同,

     重载的方法名相同,参数列表不同;

③ 重写的方法访问修饰符大于等于父类的方法,重载与修饰符无关;

④ 重写不可抛出父类没有抛出的一般异常。

super的两种用法:

1.super.xxx 或 super.xxx() 代表每个类中指向父类对象部分的引用;

2.super()代表调用父类中指定的构造器。

super和this的区别:

1.super必须继承,this不需要;

2.super 在子类中去调用父类中的构造器,

    this 在本类中调用其他的构造器。

final关键字:

类使用final修饰符修饰,表示不可以有继承的子类,称为最终类。

使用时机:

当设计者设计的类,不希望被任何人继承,从而去修改或扩展式,就可以使用final关键字。

如:Java的设计者不允许继承String类,因为它是Java语言中一个十分重要的类,改变方法的行为,从而带来不希望的结果。

通过使String类成为最终类,就能确保String对象的实现是一致性和可靠的。

final修饰类的方法,该方法就是最终方法,该方法不能被重写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: