java 继承
基础不写,记一点容易忽略的知识点(python支持多继承)
一、区分子类方法重名的3种变量
1、局部变量 直接写
2、本类成员变量 this.变量
3、父类成员变量 super.变量
package cn.wt.test.test1; public class Person { int num = 10; }
1 package cn.wt.test.test1; 2 3 public class Student extends Person { 4 int num = 20; 5 6 public void show(){ 7 int num = 30; 8 System.out.println(num); 9 System.out.println(this.num); 10 System.out.println(super.num); 11 } 12 }
1 package cn.wt.test.test1; 2 3 public class Demon01T { 4 public static void main(String[] args) { 5 Student stu = new Student(); 6 stu.show(); 7 } 8 }
二、overload和override的区别
overload: 方法名称相同,参数列表不同
override:发生在继承中,方法名称相同,参数列表相同, 在子类中添加 @Overrider 检测方法的重写是否正确
注意:(了解,默认情况下 权限 返回值 方法名称 返回值类型是相等的)
1、权限(修饰符) 子类权限大于父类权限 public>protected>(default)>private
2、返回值的数据类型范围 子类范围小于父类范围
3、方法名称 子类与父类相同
4、参数列表 子类与父类相同
三、构造方法
1、子类的构造方法,自带super()
2、通过super() 可以重载父类的构造方法,指定使用的构造方法
3、super() 必须在第一行且只能有一个
四、super的用法
1、成员变量 super.成员变量
2、成员方法 super.成员方法
3、构造方法 super()
注意
a、子类构造方法默认使用super()
b、子类的构造方法可以通过含参的super()指定继承父类的构造方法
c、类默认含有无参的构造方法,一旦定义一个有参的构造方法,无参的构造方法自动消失
d、super()在构造方法中有且只能有一个并且要在第一行
五、this的用方法
1、成员变量 this.成员变量
2、成员方法 this.成员方法
3、构造方法 this()
注意
a、可以通过this() 使用 同一个类中的构造方法
b、在一个构造方法中,this() 有且只有一个。并且必须是第一行
例子
1 package cn.wt.test.test1; 2 3 public class Person { 4 int num = 20; 5 6 public Person(){ 7 System.out.println("Person 无参构造方法"); 8 } 9 10 public Person(int num){ 11 12 System.out.println("Person类中的含参构造方法:" + this.num); 13 } 14 15 public void isShow(){ 16 System.out.println("Person 中的成员方法"); 17 } 18 }
package cn.wt.test.test1; import javax.sound.midi.Soundbank; public class Student extends Person { int num = 10; public Student(){ // super(20); this(20); System.out.println("Student 无参构造方法"); } public Student(int num){ // this(); super(10); System.out.println("Student 含参构造方法" + this.num); } public void isShow(){ System.out.println(this.num); } public void otherShow(){ System.out.println("测试......."); this.isShow(); } public void showSub(){ System.out.println(super.num); } public void useSub(){ System.out.println("Student 中的成员方法"); super.isShow(); } }
1 package cn.wt.test.test1; 2 3 public class Demon01T { 4 5 public static void main(String[] args) { 6 Student stu = new Student(); 7 // stu.otherShow(); 8 // stu.showSub(); 9 // stu.useSub(); 10 } 11 }