Java中继承与多态

📅 发布时间:2026/7/14 11:29:57 👁️ 浏览次数:
Java中继承与多态
一.什么是继承1.1 概念继承就是让一个类子类/派生类复用另一个类是父类/基类)的属性和方法同时可以拓展自己独有的方法或功能关键字extends关系is-a 子类is a 父类1.2继承的基本语法class ParentClass { // 父类的属性和方法 } class ChildClass extends ParentClass { // 子类可以添加新的属性和方法或重写父类方法 }1.3继承的特点1.一个子类只能有一个直接父类这个父类有可能继承了其他的父类2.子类拥有父类的private的属性和方法3.子类可以重写父类的方法1.4 super关键字如果我们想要在子类中访问父类的成员变量方法或者或在子类构造函数中调用父类构造函数直接访问是不行的这时我们可以通过super这个 关键字来解决这个问题1.调用父类构造方法父子父子必然是 先有父后有子也就是先要初始化父类之后接着才能去初始化子的各种属性方法所以子类构造方法中第一条语句必须是super()来调用父类的构造方法这里有里可能有人提问我没写super()这个语句编译器痘能正常编译代码答那是因为当我们没写super()时编译器会自动添加一个无参数的构造方法但是如果父类的构造方法是带参数的那么子类的构造的方法中的super(参数)这个语句就不能省略否则编译器就会报错示例1class Parent {public String nameParent(String name) {this.name nameSystem.out.println(Parent constructor);}}class Child extends Parent {Child() {super(name); // 显式调用父类无参构造函数System.out.println(Child constructor);}}示例2// 父类Animalpublic class Animal {public String name;public Animal(String name) {this.name name;}public void eat() {System.out.println(name is eating.);}}// 子类Dog继承Animalpublic class Dog extends Animal {public Dog(String name) {super(name); // 调用父类构造方法}Overridepublic void eat() {System.out.println(getName() eats dog food.);}public void bark() {System.out.println(Woof!);}}二 .方法的重写------ 继承的灵魂我们要知道继承不只是为了简单的属性复用更重要的是改写父类的行为就是方法的重写2.1 重写规则1. 方法名、参数列表、返回值类型必须和父类完全一致2.子类的方法权限不能低于父类的权限例如父类public子类不能是private3.不能重写父类 private、static、final修饰的方法重写示例public class Animal {// 父类方法public void makeSound() {System.out.println(动物在吃饭);}}public class Cat extends Animal {// 重写父类方法Overridepublic void makeSound() {System.out.println(小猫在吃鱼);}}三.什么是多态3.1定义多态指多种形态同一个行为在不同子类上表现出不同的形态和行为简单来说就是父类的引用指向子类的对象 这也被称为向上转型父类 引用名 new 子类();例如Animal animal new Cat此时就可以通过父类的引用来调用子类中重写父类的方法3.2多态的3个前提1. 必须有继承关系2. 子类必须重写父类的方法3. 父类的引用指向子类对象示例class Animal {public void eat() {System.out.println(动物吃东西);}}class Dog extends Animal {Overridepublic void eat() {System.out.println(狗吃骨头);}}class Cat extends Animal {Overridepublic void eat() {System.out.println(猫吃鱼);}}public class PolymorphismDemo {public static void main(String[] args) {// 多态父类引用指向子类对象Animal animal1 new Dog();Animal animal2 new Cat();// 调用的是子类重写后的方法animal1.eat(); // 狗吃骨头animal2.eat(); // 猫吃鱼}}总结1.继承解决代码复用子类拓展父类2.重写子类修改父类的行为3.多态父类引用指向子类对象同意行为不同实现