1. java继承中子类和父类同名的属性和方法使用
1.1 方法(重写)
B为A的子类,若使用多态
JVM在调用对象成员方法
时,会将成员方法和对象的实际内存地址进行绑定
,然后调用方法,即采用动态绑定技术
;
public class T2 {
public static void main(String[] args) {
A b = new B();
System.out.println(b.sum());
}
}
class A{
public int i=10;
public int sum(){
return i+10;
}
}
class B extends A{
public int i=20;
public int sum(){
return i+30;
}
}
结果:
1.2 属性
对对象属性的调用,是没有动态绑定技术的,属性在哪里声明,就在哪里调用
(多态中,成员变量编译和运行参考左边(引用型变量所属的类))
public class T2 {
public static void main(String[] args) {
A b = new B();
System.out.println(b.sum());
System.out.println(b.i);
}
}
class A{
public int i=10;
public int sum(){
return i+10;
}
}
class B extends A{
public int i=20;
}
结果:
public class T3 {
public static void main(String[] args) {
A1 b = new B1();
System.out.println(b.sum());
}
}
class A1{
public int i=10;
public int sum(){
return getI()+10;
}
public int getI(){
return i;
}
}
class B1 extends A1{
public int i=20;
public int getI(){
return i;
}
}
由于getI()是调用B1类中的,所以使用的属性i为B1类中的属性
结果:
2. java重载
类当中,多个不同的方法,但是方法名一致,参数列表不一致(参数个数、参数顺序、参数类型)
public class T4 {
public static void main(String[] args) {
A2 a2 = new B2();
test(a2);
}
public static void test(A2 a2){
System.out.println("a2");
}
public static void test(B2 b2){
System.out.println("b2");
}
}
class A2{
}
class B2 extends A2{
}
结果:
上诉例子中,在实际调用重载的方法时,会按照参数的类型(按照继承体系向上寻找)决定调用重载的方法