Java继承多态学习随记
继承
-
父类的private修饰无法调用
-
子类构建时,先构建所继承的父类,再构建子类
此处隐藏代码super();
,默认调用父类的无参构建。此代码必须在构建器的任何一句代码前写。
若想调用父类的有参构建,得在super();
内写上参 -
调用父类方法或参数使用
super
关键字,无此关键字遵循就近原则,子类没有向最近的一级父类上找 -
调用自己类内的参数或方法,使用
this
关键字。 -
this
和super
不能同时出现在构建方法里 -
静态方法:方法的调用只和定义的数据类型有关。
重写:父类的功能子类不一定需要或不满足 Alt+insert @Override
- 非静态
- 非final
- 非私有
- 方法名、参数列表必须相同
- 修饰符范围可扩大但不能缩小
多态
一个对象的实际类型是确定的,可以指向的引用类型不确定。父类的引用指向子类的类型,不能调用子类独有的方法,当二者都有这个方法时调用子类的方法。
引用类型指明能够使用哪些方法,而数据类型是确定的。
示例:
Person类
package Demo01;
public class Person {
private String name;
private int age;
private String gender;
private String address;
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public Person(){
this.name="name";
this.age=0;
this.gender="gender";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age<0||age>100) {
System.out.println("Wrong age");
}
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public void work(){
System.out.println("Doing……");
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Student类
package Demo01;
public class Student extends Person {
private String name;
private int age;
private int id;
private String gender;
public Student() {
this.name = "name";
this.age = 0;
this.id = 0;
this.gender = "gender";
}
public Student(String name, int age, int id, String gender) {
this.name = name;
this.age = age;
this.id = id;
this.gender = gender;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public void work(){
System.out.println("Studying……");
}
}
主函数
package Demo01;
public class test01 {
public static void main(String[] args) {
Student s1 = new Student("Britta",18,73,"female");
Person p1 = new Student("Yeast",18,76,"male");
s1.setAddress("Nanjing");
p1.setAddress("Grape");
System.out.println(s1.getAddress());
System.out.println(p1.getAddress());
p1.work();
s1.work();
}
}
布丽塔作为一个学生出现,他默认是个人,人的属性都可以调用,但他是学生,所以学生的id也可以使用。
但酵母菌作为一个人,虽然他是学生。他有学生id,但不能被查看(他不愿意使用学生id)(什么)。他是个人,只能调用Person内部的方法,Person里是没有学生id的相关方法的,因而不能被调用,即使他拥有学生id。
这就是引用类型指明能够使用哪些方法,而数据类型是确定的。
也有办法对酵母菌的id进行查看,那就是将酵母菌的类型强制转换成学生。
实际情况是,人以前是学生,但现在不是。以前有学生id,但现在不用了。很像人=学生的状态,但java的继承是单继承的,此时酵母菌就无法有学生之外的别的身份。这就要转到接口的话题了。
标签:Java,name,继承,gender,age,id,String,public,随记 From: https://www.cnblogs.com/britta/p/18664072