构造方法,super, this
-
常见问题:
-
(1)为什么在实例化子类的对象的时候,会先调用父类的构造方法?
-
实例化子类时,会调用子类的无参构造方法,子类的无参构造方法第一行有默认代码super();会去实例化父类,实例化父类的时候,会调用父类的无参构造方法;
-
-
(2)子类在哪里调用了父类的构造方法?
-
在子类的构造方法的第一行中默认(不显示)调用super()方法,即调用了父类构造方法;
-
如果父类里面没有定义有参构造,那么必须在子类的构造方法的第一行显示的调用super();
-
如果子类当中的构造方法的第一行写了this(); 那么默认(不显示)的那个super();语句就会不起作用;因为Super()和this()都只能定义在构造方法的第一行;
-
-
-
代码案例1:构造方法
public class Demo02 {
public static void main(String[] args) {
Student student=new Student();
student.haha();//Student
}
}
//父类
public class Person {
//正常方法
public void haha(){
System.out.println("Person");
}
}
//子类
public class Student extends Person {
public void haha(){
System.out.println("Student");
}
} -
总结:
-
调用构造器:可以用this(); 也可以用super();
-
super()调用父类构造器:必须放在子类构造器的第一行;否则会编译报错;
-
this()调用构造器,也必须放在构造器的第一行;
-
但是,super和 this不能同时调用,也就是说,要么调用父类构造器,要么调用子类构造器;
-
重点:子类无参构造中:有一句默认代码:super()//默认是不显示的;如果要显式调用,必须放在第一行
-
-
多态存在的条件:
-
有继承关系;
-
-
父类的引用指向子类的对象;
-
-
多态的注意点:
-
多态是方法的多态,属性没有多态;
-
instanceof方法:判断是否有继承关系;
-
-
代码案例:重点1
/**
* 测试类
*/
public class Demo02 {
public static void main(String[] args) {
//创建一个Student对象
Student student=new Student();
student.haha();//Student
//创建一个父类对象
Person person=new Person();
person.haha();//Person
//多态
Person person1=new Student();
person1.haha();//Student//子类重写父类的方法,执行的就是子类的方法;
}
}
//父类
public class Person {
//正常方法
public void haha(){
System.out.println("Person");
}
}
//子类
public class Student extends Person {
public void haha(){
System.out.println("Student");
}
} -
代码案例2:抽象类案例
public class Demo02 {
public static void main(String[] args) {
Student student=new Student();
student.haha();//Student
student.study();//study
Person person=new Student();
person.haha();//Student
person.study();//study
}
}
//父类
public abstract class Person {
//正常方法
public void haha(){
System.out.println("Person");
}
//抽象方法
public abstract void study();
}
//子类
public class Student extends Person {
public void haha(){
System.out.println("Student");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律