Java学习笔记之六——Java类的继承和多态(1)
一,Java类的继承
1,为什么要继承?
答:通过继承可以使对对象的描述更加清晰,可以实现代码的复用,可以实现重写类中的变量或方法,可以实现在无源代码的情况下修改被继承的类。
2,Java的类如何实现继承?
答:Java类的继承是单一的,也是完全继承的。通过关键词extends关键字来实现。被继承的类称为父类,继承父类的类称为子类。继承语法:public calss classname extends superclassname.因为Java类的继承是单一的,所以extends后面只能指定一个父类。而完全继承则是指“一个类继承了父类的所有成员变量和成员方法。
例:在l类1中的平面坐标系中设置x和y,当要再定义一个空间坐标系的时候只需继承类1,再在其子类中添加一个z轴就行了。
int x;
int y;
public one(){
x = 0;
y = 0;
}
}
然后再定义类2,通过类2继承类1:
int z;
public one(){
z = 0;
}
}
这样就实现了类的继承。
3,类继承中的隐藏/覆盖/重载是怎么样的?
答:(1)类的隐藏:隐藏发生在子类和父类之间,针对父类中成员变量和静态方法而言的。当子类中声明与父类中声明的成员变量名相同时,则实现了对父类成员变量的隐藏。
(2)类的覆盖:覆盖也是发生在子类和父类之间,是指在子类中声明一个与父类具有相同的方法名/输入参数列表/返回值/访问权限等的方法,除过方法体不同外。在子类中重新编写方法实现的功能。 常被用于替换父类相同的方法,实现功能的更新。
例:
public void Display(){ //定义父类中Display方法
System.out.println("This is class three");
}
}
class four extends three{ //继承类three
public void Display(){ //覆盖父类three中的Display方法
System.out.println("This is class four");
}
}
(3)类的重载:可发生在父类与子类之间,也可发生在同一类中。是指在子类与父类之间或同一类中定义多个具有相同方法名/访问权限等的方法。
例:
public void Display(){ //父类中Display方法
System.out.println("this is class five");
}
}
class six extends five{ //继承类five
public void Display(String s){ //冲在父类中Display方法
System.out.println(s);
}
}
public class seven{
public static void main(String[] args){
six a = new six();
a.Display(); //调用父类中Display方法
a.Display("this is class six"); //调用子类中Display方法
}
}
4,构造方法的重载.
在上例中 six a = new six();new后面是调用类的构造方法,如果当类没有构造方法的时候,创建类对象时调用无任何操作的默认构造方法。当子类有自身的无形式列表的构造方法时,创建对象时,会先创建父类的对象,再创建子类的对象。
如下面代码:
public class Output{
public Output(){
System.out.println("This is class Output");
}
}
//第二个类-------子类
public class Input extends Output{
public Input(){
System.out.println("This is class Input");
}
}
//第三个类
public class sample{
public static void main(String[] args){
Input a = new Input();
}
}
上面代码最后输出为:
This is class Output
This is class Input
可见最后如果没有构造方法,创建对象后会先调用父类对象,后调用子类对象。