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
{
private String name;
public Birds()
{
}
public Birds(String name)
{
this.name=name;
}
public void walk()
{
System.out.println("走路");
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
}
//定义子类Chinken扩展父类Birds.
public class Chicken extends Birds
{
private String crest; //增加新属性鸡冠crest
public Chicken()
{
super(); //在初始化父类的同时,初始化子类
}
public Chicken(String name,String crest)
{
super(name);
this.crest=crest;
}
public void setCrest(String crest)
{
this.crest=crest;
}
public String getCrest()
{
return crest;
}
public void wu() //增加新的行为wu
{
System.out.println("小鸡咕咕咕。。。");
}
}
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
{
return super.clone();//引用Object父类对象的clone()方法。
}
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声明类
{
protected double radius;
public void setRadius(double radius){this.radius=radius;}
public double getRadius(){return 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{
//.......
}