1、继承:可以基于某个父类对对象的定义加以扩展,而制定出一个新的子类定义。子类可以继承父类原来的某些定义;也可以增加原来的父类所没有的定义;也可以重写父类中的某些特性。 2、在java中,所有的类都直接或间接继承了java.lang.Object类。 3、扩展(Extends)父类。Java中使用extends作为其扩展父类的关键词。子类与父类是“is a”关系(Chicken is a Bird)。 4、当扩展某个类时,该类的所有public成员都可以在派生类中被调用,而private成员则不可以直接在派生类中被调用。 5、在扩展某个类后,可以一并初始化父类的构造函数,以完成相对应的初始化动作,可以使用 super()方法来实现,它表示调用父类的构造函数。 例如://定义一个父类(鸟类),鸟类定义属性“name”,行为“走路” public class Birds //定义子类Chinken扩展父类Birds. public class Chicken extends Birds { 6、public 可以被所有其他类访问; protect 自身、子类及同一个包中类可以访问; private 只能被自身访问和修改; package 同一个包中的类可以访问。 7、重写(Override)方法。类是对象的定义书。如果父类中的定义并不符合要求,可以在扩展类的同时重写。可以重写方法的实现内容、成员存取权限、成员的返回值类型(有严格要求)。 8、重写方法时要注意:可以扩大父类的方法权限,但不可以缩小父类的方法权限。 重写返回值类型有限制条件,重写的返回值类必须是父类中同一方法返回类的子类。 无法重写static方法,一个方法要被重写,它必须是非static的。 例如:父类Bird类的方法:public Bird getCopied(){return new Bird(name);} 重写返回值类型为:public Chicken getCopied(){return new Chicken(name,crest);} 9、如果在子类中调用父类的构造方法,使用super();如果在子类中调用父类的方法,则可以使用 super.methodName();调用的前提条件是父类的方法或者构造函数不能是private的。 10、Object类。Object类是java中所有类的父类,每一个对象都是Object对象的子对象。所以使用Object声明的名称,可以参考至任何的对象,不会发生错误。 11、Object的toString()、equals()、haseCode()、clone()方法。(以上方法都可以重写)。 toString()方法是对对象的文字描述,会返回一个String实例对象。默认返回类名称和十六进制编码,即以下字符串:getClass().getName()+'@'Integer.toHexString(hashCode())。 其中getClass()是Object中定义的方法,返回对象于执行时期的Class实例。getName()是返回类名称。 equals()本身是比较两个对象的内存地址是否相同,可以重写该方法,用以判断自己的两个对象什么情况下是相同的对象。重写equals()方法的同时,建议重写hashCode()方法。 clong()方法是有关如何复制对象本身的方法。在进行对象复制时,需要在定义类上挂一个识别接口Clongable,表示这个类的实例支持自身复制。复制出来的实例对象与原对象是不干涉的,是两个独立的个体。重写clone()方法时,要throws CloneNotSupportedException。 public Object clone() throws CloneNotSupportedException 13、final关键词。用在变量声明时,表示变量一旦设置,不可改变。如果用来定义方法时,表示方法成员无法被子类重写。声明类时加上final,则表示这个类不能被其他类继承。 |
1、多态实现指的是使用同一个实现接口,以实现不同的对象实例。多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 例如:假设有两个类Class1和Class2,每个类上均定义了一个doSomething()方法,用execute()方法来分别实现Class1和Class2的实例。 public void execute(Class1 c1){c1.doSomething();} public void execute(Class1 c1){c1.doSomething();} /*这样execute()方法分别依赖Class1和Class2两个类,如果有10个定义了doSomething()方法的类,就要依赖10个,并要分别编写代码。与其这样,不如定义一个父类ParentClass类,其中定义有doSomething()方法,然后让Class1和Class2....Classn都继承ParentClass类,并重写doSomething()方法,这样就可以用通用的代码,适应需求的不断变化。 execute()方法可改成:*/ public void execute(ParentClass c){c.doSomething();} 2、java中在实现多态时,可以让程序依赖于抽象类或是接口。 3、抽象类。仅声明方法名称而不操作其中逻辑的方法就是抽象方法,包含抽象方法的类被称为抽象类,抽象类不能生成对象,只能用来继承,并与继承后实现抽象方法。在java中要声明抽象方法和抽象类需使用abstract关键词。 abstract class AbstractCircle //用abstract声明类 public void setRadius(double radius){this.radius=radius;} public abstract void render();//用abstract声明方法,而且方法中没有{ },以分号;结束,表明没有实现任何内容。 4、接口。 接口的声明使用interface关键词,接口上的方法权限默认为public,可以省略不写。 [public]interface 接口名称{ 权限设置 返回类型 方法(参数列); 权限设置 返回类型 方法(参数列); ................. } 使用implements关键词来指定要实现的接口,接口中所有定义的方法都要实现。在java中可以一次实现多个接口。 public class 类名称 implements 接口1,接口2,接口3,接口n{ //接口实现 } 接口也可以进行继承动作,一个接口可以同时继承多个父接口。 public interface 接口名称 extends 接口1,接口2,接口3,接口n{ //....... } |