Java SE第十七,八,九,二十讲 继承剖析

1.方法重载(Overload)表示两个或是多个方法名字相同,但是方法的参数不同.方法参数不同的两层含义:

1)参数不同.

2)参数的类型不同.注意:方法的返回值对重载没有任何影响.一定是由参数决定的,和返回值没有关系.

2.构造方法的重载:只要看参数即可.

this关键字:

public class ConstructorOverload

{

public ConstructorOverload()

{

this.(3);//this 表示第对当前对象的引用.

System.out.println(“test”);

}

public ConstructorOverload(int i)

{

System.out.println(++i);

}

public static void main(String [] args)

{

ConstructorOverload col = new ConstructorOverload();

}

}

如果想要在一个构造方法中调用另一个构造方法,可以使用this()的方式调用,this()括号中的参数表示目标构造函数的参数.this必须要放在构造函数的第一条语句的位置,之前不能有任何的可执行语句.

 

3.继承(Inheritance):Java是单继承的,表示一个类只能够从另一个类中继承,(被继承 的类叫做父类也叫做基类(base classs),

继承的类叫做子类),Java中的及继承使用extends关键字.

Child.java代码如下:

public class Child extends Parent

{

public Child()

{

System.out.println(“Child”);

}

public stratic void main(String [] agrs)

{

Child child = new Child;

}

}

class Parent

{

public Parent()

{

System.out.println(“parent”);

}

}

先执行父亲的构造函数,然后执行孩子的构造方法.

子类和父类对象在内存中是挨着放的.

4.当生成子类的对象时,Java默认首先调用父类的不带参数的构造方法.然后执行该构造方法,生成父类的对象,接下来再去调用子类的构造方法,生成子类对象.要想生成子类对象先要生成父类对象,没有父类对象就没有子类对象.

5.super表示对父类对象的引用,

6.如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法.

7.对super的调用必须是构造方法的第一条语句.和this类似.

8.

public class InheritenceTest

{

Apple apple = new Apple();

System.out.println(apple.name);

}

class Fruit

{

String name="fruit";

}

class Apple extends Fruit

{

String name=”apple”;

}

关于继承的三点:

a)父类有的,子类也有.

b)父类没有的,子类可以增加.

c)父类有的子类可以改变.

9.关于继承的注意事项

①构造方法不能被继承.

②方法和属性可以被继承

③子类的构造方法的隐式的调用父类的不带参数的构造方法

④子类使用super关键字显式的调用父类的构造方法,super指的是对父类的引用.

⑤super关键字必须是构造方法中的第一行语句.

10.方法的重写(Override):子类与父类的方法返回类型一样,方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系.

11.方法重写与方法重载之间的关系:重载发生在同一个类内部的两个或者多个方法.重写发生在父类与子类之间.重写一定是伴随着继承而发生的.重载时平行的关系,重写是一种层次关系.

12.当两个方法形成重写关系时,可以在子类方法中通过super.run()调用父类的run()方法,其中super.run()不必放在第一行语句,因此此时父类对象应经构造完毕,先调用父类的run()方法还是先调用子类的run()方法是根据程序的逻辑决定的.

13.在定义一个类的时候,如果没有显式的去指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接父类).

14.多态(polymorphism):我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思就是:父类型的引用可以指向子类的对象.指向谁就调用谁的方法.

Parent P = new  Child();当使用多态方式去调用方法的时候,首先检查父类中是否有sing()方法,如果没有则编译错误;如果有,再去调用子类的sing()方法.

方法的重载不是多态

多态是一种运行期的行为

15.一共有两种类型的强制类型转换:

①向上的类型转换(upcast):比如说将Cat类型转换成Animal类型.即将子类型转换为父类型.对于向上类型转换,不需要显式的指定.

Cat cat = new Cat();

Animal animal = (Animal)cat;//可以不显式的强制类型转换.

animal.sing();

②向下的类型转换(downcast)比如将Animal类型转换为Cat类型.即将父类型转换为子类型.对于向下类型转换,必须要显式指定(必须要使用

Animal a = new Cat();

Cat cat = (Cat)a;

cat.sing();

为什么使用强制类型转换:

使用父类的引用,只能使用从父类继承来或是重写的方法,不能使用父类新增加的方法.所以...

posted @ 2011-02-26 21:59  donaldjohn  阅读(186)  评论(0编辑  收藏  举报