上转型中:
- 如果父类中的属性和子类的属性同名的时候, 父类对象认为认为子类的属性是特有的 , 父类定义的对象只调用自己的属性。
2.即是当父类属性和子类属性同名时, 父类对象名 调用的就是 父类的属性,子类的对象名 调用的就是 子类的属性。 - 如果父类的方法和子类方法同名时,在上转型关系中,父类的引用指向子类的实体 ,父类的对象调用的是子类的方法。但是要注意,此时父类的对象名不能调用子类特有的方法,如果要调用,则需要下转型。
父类:
package com.qf.demo6;
public class Test {
public static void main(String[] args) {
Person person = new Person();
Student student = new Student();
Person person2 = new Student();
person2.eat();//父类的引用指向 子类的实体 父类的对象调用的是子类的方法
System.out.println(person2.name);
System.out.println(person2.age);
Student student2 = (Student) person2;
System.out.println(student2.name);
System.out.println(student2.age);
// 父类对象名 调用的就是 父类的属性
// 子类的对象名 调用的就是 子类的属性
/**
* 父类的 属性和 子类属性同名 . 父类调用父类的
* 子类重写了 弗雷德分昂发 父类对象调用的是子类的方法
*/
}
}
Student类
package com.qf.demo6;
public class Student extends Person{
String name = "zzz";
int age = 1;
String sex= "女";
@Override
public void eat() {
System.out.println("学生吃肉");
System.out.println(name);
System.out.println(super.name);
System.out.println(super.age);
}
public void eat1() {
System.out.println("学生dd吃肉");
}
}
Person类
package com.qf.demo6;
public class Person {
String name="abc";
int age= 9;
public void eat(){
System.out.println(name);
System.out.println("吃");
}
}