继承
super注意点:
-
super调用父类的构造方法,必须在构造方法的第一个
-
super 必须只能出现在子类的方法或者构造方法中!
-
super和 this 不能同时调用构造方法!
this:
代表的对象不同:
this: 本身调用者这个对象super:代表父类对象的应用前提
this: 没有继承也可以使用
super: 只能在继承条件才可以使用构造方法
this():本类的构造
super():父类的构造!
package com.oop.demo04;
public class Person {//父类
//Alt+H查看父类子类
//public
//protected
//default
//private
String name="幻世蛮殇";
private int money=10_0000_0000;
public Person() {
System.out.println("调用父类构造器");
}
public void say(){
System.out.println("说了一句话!");
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void print(){
System.out.println("Person");
}
}
package com.oop.demo04;
public class Student extends Person{//子类,子类继承父类,就会继承所有方法
String name="hsms";
public Student() {
super();//默认,默认先调用父类构造器,且必须在子类构造器上
System.out.println("调用子类构造器");
}
public void test(String name){//测试属性
System.out.println("形参:"+name);
System.out.println("子类中的名字:"+this.name);
System.out.println("父类中的名字:"+super.name);
}
public void test1(){//测试方法
print();
this.print();//子类
super.print();//父类;当为私有方法的时候无法调用
}
public void print(){
System.out.println("Student");
}
}
package com.oop;
import com.oop.demo04.Student;
public class Application {//测试类
public static void main(String[] args) {
Student student = new Student();
//student.say();
//System.out.println(student.getMoney());
/*student.test("仰望星空");
student.test1();*/
}
}
调用父类构造器
调用子类构造器
说了一句话!
1000000000
形参:仰望星空
子类中的名字:hsms
父类中的名字:幻世蛮殇
Student
Student
Person
方法重写
为什么要重写:
1.父类的功能,子类不一定需要,或者不一定满足
Alt+Insert;override;
静态方法时:
方法的调用只和左边定义的数据类型有关
//A继承B
A a=new A();
a.test();
B b=new A();//父类的引用指向子类
b.test();
结果:
A=>test()
B=>test()
非静态方法时:重写
A=>test()
A=>test()
package com.oop.demo05;
public class A extends B{
@Override//注解:有功能的注释
public void test() {
System.out.println("A=>test()");
}
}
package com.oop.demo05;
public class B {
public void test(){
System.out.println("B=>test()");
}
}
1.需要有继承关系:子类、父类才能重写,子类重写父类方法。
2.方法名必须相同
3.参数列表相同
4.修饰符:范围可以扩大但不能缩小;public>protected>default>private
5.抛出异常:范围,可以缩小但不能扩大;ClassNotFoundException–>Exception
重写,子类的方法名和父类必须一致,方法体不同