【求租】关于继承方面的问题

Mccccce 2020-03-30 01:01:10
上代码:
package abstructTest;
public class PersonTest {
public static void main(String[] args) {
var person=new Person[2];
Person p=new Student("c", "math");
person[0]=new Student("mac", "computer");
person[1]=new Employee("mce", 5000, 1996, 6, 12);
for (Person x : person) {
System.out.println(x.getName()+","+x.getDescription());
}
System.out.println(p.getDescription());
System.out.println(p.getName());
}
}
——————————————————————————
package abstructTest;

public abstract class Person {
public abstract String getDescription();
private String name;
public Person(String name) {
this.name=name;
}
public String getName() {
return name;
}
}
——————————————————————————
package abstructTest;

public class Student extends Person {
private String major;
public Student(String name,String major) {
super(name);
this.major=major;
}
public String getDescription() {
return "a student majoring in"+major;
}
}
——————————————————————————
package abstructTest;

import java.time.*;


public class Employee extends Person {
private double salary;
private LocalDate hireday;
public Employee(String name,double salary,int year,int month,int day) {
super(name);
this.salary=salary;
hireday=LocalDate.of(year, month, day);
}
public String getDescription() {
return String.format("an employee with a salary of $%.2f" , salary);
}
public void rasieSalay(double bypercent) {
double raise=salary*bypercent/100;
salary+=raise;
}
public double getSalary() {
return salary;
}
public LocalDate getHireday() {
return hireday;
}
}
——————————————————————————
问题就是这两个标红的代码,这是java核心技术里面的一则代码,其中super关键字是引用父类的构造方法来构造这个name,我想问的就是那这个name参数是直接传递给父类的private的name变量了吗。因为有说抽象类是没有办法构造对象,并且创建数组的时候就是用的子类的对象放在了父类的对象变量里面,那引用getName方法就是引用子类里面继承的方法呀,既然子类中没有继承父类的private类型的变量name,那为啥还能做到输出name呢?求大神解释一下,这里直接就看混乱了
...全文
105 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
亦夜 2020-03-30
  • 打赏
  • 举报
回复
这个完全没有任何问题哦,这是多态的表现,父类引用指向子类对象,这里使用的都是子类属性
qq_39936465 2020-03-30
  • 打赏
  • 举报
回复
引用 楼主 Mccccce 的回复:
问题就是这两个标红的代码,这是java核心技术里面的一则代码,其中super关键字是引用父类的构造方法来构造这个name,我想问的就是那这个name参数是直接传递给父类的private的name变量了吗。因为有说抽象类是没有办法构造对象,并且创建数组的时候就是用的子类的对象放在了父类的对象变量里面,那引用getName方法就是引用子类里面继承的方法呀,既然子类中没有继承父类的private类型的变量name,那为啥还能做到输出name呢?求大神解释一下,这里直接就看混乱了
你的基础没学好啊!关于继承子类是完全继承父类的所有东西,是所有东西记住,但是继承了所有东西并不表示你有权利使用,这里的name就是这种情况。但是你这里的PersonTest 申明的是父类变量,所以父类当然可以使用自己的name变量。子类重写父类方法时,调用父类方法也是子类方法,这个都是基础知识。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧