文章目录
类的继承,super,方法的重写,多态1.类的继承代码演示:2.super和this代码演示:3.方法的重写代码演示:4.多态代码演示:类的继承,super,方法的重写,多态
1.类的继承
继承的本质是对某一批类的抽象,从而实现对世界更好的建模extends的意思是“扩展”。子类是父类的扩展JAVA中类只有单继承,没有多继承!(一个儿子只有一个爸爸,但爸爸可以有多个儿子)继承是类和类之间的一种关系。除此之外,类和类的关系还有依赖,组合,聚合等。继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示子类和父类之间,从意义上讲应该具有“is a”的关系代码演示:
父类Person:
//Person 人:父类//在java中,所有的类都间接或直接继承Object类public class Person /*extends Object*/{public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}//public可被继承,private则不能private int money = 10_0000_0000;public void say(){System.out.println("说了一句话");}}
子类Student:
//学生 is 人 :子类//子类继承了父类就会拥有父类的全部方法public class Student extends Person{//ctrl + h 显示继承关系}
main方法:
public static void main(String[] args) {Student student = new Student();student.say();System.out.println(student.getMoney());}
结果:
2.super和this
super注意点:
super调用父类的构造方法,必须在构造方法中的第一个super必须只能出现在子类的方法或者构造方法中!super和this不能同时调用构造方法
super 和 this 的区别:
代表的对象不同:this:本身调用这个对象。super:代表父类对象的引用前提:this:没有继承也可以使用。super:只有继承条件才可以使用构造方法:this() 本类的构造。super():父类的构造。
代码演示:
父类:Father类:
public class Father {protected String name = "爸爸";public void print(){System.out.println("打印爸爸");}}
子类:Son类:
public class Son extends Father{private String name = "儿子";public void print(){System.out.println("打印儿子");}//方法的调用public void test1(){this.print();super.print();}//对象的调用public void test2(){System.out.println(this.name);System.out.println(super.name);}}
main方法:
public static void main(String[] args) {Son son = new Son();son.test1();son.test2();}
输出结果:
3.方法的重写
重写:需要有继承关系,子类重写父类的方法!
方法名必须相同参数列表必须相同修饰符:范围可以扩大但不能缩小; public>prtected>private抛出的异常范围可以被缩小,但不能扩大;ClassNotFoundException -->Exception(大)重写,子类的方法和父类必须一致,方法体不同
为什么需要重写?
父类的功能,子类不一定需要,或者不一定满足
快捷键 :alt+inert ->override;
代码演示:
父类B:
public class B {public void test(){System.out.println("Hello,B");}}
子类A:
public class A extends B{@Overridepublic void test() {System.out.println("Hello,A");}}
main方法:
public static void main(String[] args) {A a = new A();a.test();}
4.多态
即同一方法可以根据发送对象的不同而采用不同的行为方式。
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多(父类,有关系的类)。
多态存在的条件:
有继承关系子类重写父类方法父类引用指向子类对象
注意:多态是方法的多态,属性没有多态。
代码演示:
父类Person:
public class Person {public void run(){System.out.println("run");}}
子类Student:
public class Student extends Person{public void run(){System.out.println("son");}}
main方法:
public static void main(String[] args) {//一个对象的实例类型是确定的//但是可以指向的引用类型就不确定了:父类的引用指向子类//Student 能调用的方法都是自己的或者继承父类的Student s1 = new Student();//Person 父类型,可以指向子类,但是不能调用子类独有的方法Person s2 =new Person();//对象能执行哪些方法,主要看对象左边的类型,和右边关系不大s1.run();//如果子类重写了父类的方法,执行子类的方法s2.run();}