将属性改为private,然后设置get/set方法
继承
查看类的继承关系快捷键:CTRL + H
- 所有类都默认继承了Object类
- Java中只有单继承没有多继承
-
问:java是单继承,但是所有类都是Object类的子类,那么既然已经继承Object,为什么还能继承一个其他的类呢?
-
答:https://blog.csdn.net/yekui/article/details/84222590
- 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等
- 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示
// 此代码段为两个Java源文件,通过*行分隔。
public class Person {
private String name = "Wwz";
int age = 23;
public void say() {
sout("Person.say()");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
*****************************************************************************************************************
public class Student extends Person {
}
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.say();
System.out.println(student.name); // 此行代码报错,因为name为private,子类继承了此属性,但不可见。可通过public的get/set方法获取。
System.out.println(student.age); // 顺利打印:23
}
}
this和super
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
- this和super分别代表本身调用者这个对象和代表父类对象的引用
- this没有继承也可以使用
- super只能在继承条件下才可以使用
- this();调用本类的构造
- super();调用父类的构造
public class Person {
protected String name = "WZhAng";
private void print() {
System.out.println("Person method.");
}
}
*****************************************************************************************************************
public class Student extends Person {
private String name = "Wwz";
public void print() {
System.out.println("Student method.");
}
public void test1(String name) {
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
public void test2() {
print();
this.print();
super.print(); // 此行代码报错,父类的print方法为private属性。
}
}
*****************************************************************************************************************
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.test1("汪汪~");
student.test2();
}
}
继承中构造器问题
子类的无参构造器隐式调用了父类的无参构造器
public class Person {
public Person() {
System.out.println("执行了Person无参构造器。");
}
}
***************
public class Student extends Person {
public Student() {
super();// 此行代码被隐藏了,默认调用父类的无参构造器。且必须放在子类构造器的第一行。
this("调用子类有参构造器。");//此行代码报错,必须放在子类构造器的第一行。与super()冲突。
System.out.println("执行了Student无参构造器。");
}
publi Student(String name) {
}
}
****************
public class Application {
public static void main(String[] args) {
Student student = new Student();
}
}



