什么是继承?
在Java中,子类继承父类时会继承父类的属性以及方法。以动物类为例,动物类具有体重、毛发的颜色、器官等属性,它的一个子类(如猫类)在继承动物类时就会继承它的这些属性;对于行为,动物有捕猎、运动这种通用的方法,但是不同的子类在继承方法时的具体行为是不同的,猫类在继承捕猎时捕捉的是鱼、老鼠,而鸟类捕捉的是虫子。
继承的一些要点:
关键字:extends 语法:public 子类 extends 父类 { };
Java中的继承是单继承,子类只能直接继承它的父类而非父系类。在继承父类时,子类可以访问除了private以外的所有属性和接口。
继承有什么好处?
继承能够提高代码的复用性,让代码更加简洁。父类中已经提到属性、行为,我们在子类中就不用再重新写一遍了,这样不仅看起来简洁,维护起来也更加方便。更重要的是,继承让类和类之间产生了关联,因此才有了多态。多态,是指父类中的一个行为,在不同的子类中会以不同的方法实现。可以在子类中重写父类的方法,子类创建的对象会优先调用子类中重写好的方法。在下面的代码中,父类是学生类,两个子类分别为UNstudent和MIDstudent,二者在各自的类中重写了read这一行为,所创建的对象就会优先调用自己的read。
父类与子类之间会涉及到转型的问题。如果我们创建了一个学生对象stu,给它赋值一个大学生的对象unstu,这么做是安全的。我们可以说大学生是学生,但反过来就不行。也就是说,在赋值转型时,等号左侧的必须是父系类的对象。否则就有可能发生危险
class
Student
{
public void
read
(){
System
.
out
.
println
(
"
读书
"
);
}
}
class
UNStudent
extends
Student
{
public void
printUNStudent
(){
System
.
out
.
println
(
"Unstudent"
);
}
public void
read
(){
System
.
out
.
println
(
"UNStudent
读书
"
);
}
}
class
MIDStudent
extends
Student
{
public void
read
(){
System
.
out
.
println
(
"MIDStudent
读书
"
);
}
}
class
Manage
{
public static void
main
(
String
[]
args
){
// byte max:127
// // b = 127 b++;//
// for(byte b = 0;b<200;b++){
// System.out.println (b);
// }
UNStudent
unstu
=
new
UNStudent
();
Student
stu
=
unstu
;
stu
.
read
();
UNStudent
unstu2
=
(
UNStudent
)
stu
;
unstu2
.
printUNStudent
();
MIDStudent
midStu
=
new
MIDStudent
();
Student
stu2
=
midStu
;
stu2
.
read
();
//
强制转型之前 必须验证对象的原始类型
if
(
stu2
instanceof
UNStudent
){
UNStudent
unstu3
=
(
UNStudent
)
stu2
;
unstu3
.
printUNStudent
();
}
else
{
System
.
out
.
println
(
" stu2 is not UNStudent Class Type"
);
}
}
}