在Java的使用过程中,我们不免会涉及到创建许多的类来实现不同的功能,但如果在每一个新类中用同一个功能时全部重写未免过于冗杂,于是就涉及到子类与父类的继承关系
以动物与宠物之间的关系为例,宠物属于包含在动物中的类,一些在“动物”中的使用方法同样也可以在“宠物”中使用,在代码中就涉及到了继承关系
//定义类
public class Animal {
//属性
private String kind;
//方法
public void setKind(String k){
kind = k;
}
public String getKind(){
return kind;
}
public void basic(){
System.out.println(kind+"是动物");
}
}
如图,我们首先定义“动物”类并写出一些基本的功能
//宠物类
public class Pet extends Animal{
public void printKind(){
System.out.println("动物:"+getKind());
}
public void basic(){
//保留原有父类功能:调用父类方法
//super 表示当前类的父类对象
//this 表示本类对象
super.basic();
//自定义新功能
System.out.println("子类继承父类方法!");
}
}
然后我们在设计“宠物”类的时候,可以通过“extends”来实现子类对父类的继承,此时,在子类中可直接调用父类中的方法
注意!当子类与父类中的功能冲突时,会优先调用子类中的方法,若想实现父类的功能在子类中同时实现的时候,就需要使用“super”来表示父类中的功能;同理,“this”则代表本类中的功能
随后我们创立方法类并将主函数设置在这个类里
public class Mange {
//函数
public static void main(String[] args) {
//自动转型(向上)B extends A => A = new B();
Pet p = new Pet();
p.setKind("老虎");
// p.basic();
//
// //自动转型后该对象只能调用子类中重写的方法
// //强制转型(向下转型)
// Pet pet = (Pet)p;
// pet.printKind();
Master m = new Master();
m.feed(p);
}
}
如图,使用了extends后会有自动转型(向上)的情况,即当B为A的子类,就可以直接创建一个在A类中的B对象,执行的是子类的功能。但会出现一些只存在于子类的方法不能使用,就需要强制转型(向下)
这时我们再定义一个“主人”类:
public class Master {
public void feed(Animal an){
an.basic();
}
}
此时若要使用这个类中的方法,只需要创建一个新的对象,后把对象名写入即可
注意!这里即使“宠物”与“动物”数据类型不一样,只要“宠物”是“动物”的子类,就可以调用
2237





