目录
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方法 报错了!(不考虑父类的父类)*/
}
下一篇文章:方法重写