目录
this与super区别
1.访问成员变量-示例代码
继承中构造方法的访问特点
2.访问构造方法-示例代码:
继承中成员方法访问特点
3.访问成员方法-示例代码:
super 关键字的用法和 this 关键字相似
- this : 代表本类对象的引用
- super : 代表父类存储空间的标识(可以理解为父类对象的引用)
关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 |
this | this.成员变量(访问本类的成员变量) | this(...)(访问本类的构造方法) | this.成员方法() (访问本类的成员方法) |
super | super.成员变量(访问父类的成员变量) | super(...)(访问父类的构造方法) | super.成员方法() (访问父类的成员方法) |
1.访问成员变量-示例代码
Student.java
package com.面向对象.Demo6;
public class Student extends Parent {
public String name = "xiaojun";
public int age = 21;
public void show() {
int age = 18;
System.out.println("访问当前方法中局部变量学生年龄age:" + age);
System.out.println("访问当前子类中的学生年龄age:" + this.age);
System.out.println("访问当前父类中的学生年龄age:" + super.age);
}
}
Parent.java
package com.面向对象.Demo6;
public class Parent {
public int height = 175;
public int age = 24;
public int weight = 110;
}
Demo.java
package com.面向对象.Demo6;
public class Demo {
public static void main(String[] args) {
Student student = new Student();
student.show();
}
}
运行结果:
继承中构造方法的访问特点
- 子类中所有的构造方法默认都会访问父类中的无参的构造方法
- 因为子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化之前,需要对父类进行初始化
- 每个子类构造方法的第一句默认都是: super()
如果父类中没有无参构造方法,只能带参构造方法,怎么办?
- 通过super 关键字显示调用父类的有参构造方法
- 父类中自己单独定义一个无参构造方法
2.访问构造方法-示例代码:
Parent.java
package com.面向对象.Demo7;
public class Parent {
/**
* 父类中不写无参构造方法,子类中只能使用super调用有参构造方法
*/
// public Parent() {
// System.out.println("父类中的无参构造方法");
// }
public Parent(int age){
System.out.println("父类中的有参构造方法");
}
}
Student.java
package com.面向对象.Demo7;
public class Student extends Parent{
/**
* 构造方法——给对象属性赋值
* 子类中的无参/有参构造方法 必须可以访问到父类中的无参/有参构造方法,否则报错
*/
public Student() {
// super(); // 访问我们父类中的 无参构造方法,默认第一句是有super()的,
super(20); //调用我们父类中的 有参构造方法(有了这一句,父类中的无参构造方法将不会被调用)
System.out.println("学生类无参构造方法");
}
public Student(int age) {
// super(); //默认访问父类中的无参构造方法
super(21);// 如果父类中没有无参构造方法,这里就只能调用父类中的 有参构造方法
System.out.println("学生类有参构造方法");
}
}
StudentDemo.java
package com.面向对象.Demo7;
public class StudentDemo {
/**
* 我们子类中的所有构造函数(方法)都会默认的访问父类中的 无参构造方法
* @param args
*/
public static void main(String[] args) {
Student student1 = new Student(); // 执行学生类的无参构造方法
Student student2 = new Student(21); // 执行学生类的有参构造方法
}
}
运行结果:
继承中成员方法访问特点
通过子类对象访问一个方法
- 子类成员范围找
- 父类成员范围找
如果还找不到就报错(不考虑父类的父类)
3.访问成员方法-示例代码:
Parent.java
package com.面向对象.Demo8;
public class Parent {
public void mayikt(){
System.out.println("父类中的mayikt方法");
}
}
Student.java
package com.面向对象.Demo8;
public class Student extends Parent{
public void mayikt(){
super.mayikt(); //调用父类中的 mayikt 方法
System.out.println("子类中的mayikt方法");
}
}
StudentDemo.java
package com.面向对象.Demo8;
public class StudentDemo {
public static void main(String[] args) {
Student student = new Student();
student.mayikt(); // 父类中的mayikt方法
// 子类中的mayikt方法
}
/**
* 上面调用的mayikt方法
* 1.子类中查找mayikt方法
* 2.父类中查找mayikt方法
* 3.父类中没有mayikt方法 报错了!(不考虑父类的父类)
*/
}
下一篇文章:方法重写