面向对象三大特征之继承、多态

面向对象三大特征之继承、多态

一、继承

继承(Inheritance):继承是一种实现了代码重用的机制,它允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以通过继承获得父类的属性和方法,并且可以对这些属性和方法进行扩展、重写或隐藏,从而实现代码的灵活性和扩展性。

1.基础用法

class 父类{
    ...       //成员变量、成员方法
}
class 子类 extends 父类{
    ...       //类体
}

2.重写父类中的方法

class Animal {
    public void makeSound() {
        System.out.println("Animal is making a sound.");
    }
}
class Dog extends Animal {
	//重写父类中的方法
    @Override
    public void makeSound() {
        System.out.println("Dog is barking.");
    }
}
public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound(); // 输出: Dog is barking.
    }
}

3.super关键字

super关键字引用父类对象
super关键字可以调用父类中的方法和属性

class Animal {
    public void makeSound() {
        System.out.println("Animal is making a sound.");
    }
}
class Dog extends Animal {
	//重写父类中的方法
    @Override
    public void makeSound() {
    //使用super关键字调用父类中的方法
        super.makeSound();
        System.out.println("Dog is barking.");
    }
}
public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound(); // 输出:Animal is making a sound. Dog is barking.
    }
}

二、多态

多态(Polymorphism):多态是指同一种行为具有多种不同表现形式的能力。在Java中,多态具体包括编译时多态(静态多态)和运行时多态(动态多态)。编译时多态是指方法的重载(overloading)和方法的重写(overriding),而运行时多态是指通过继承和接口实现的动态绑定。多态性使得我们可以根据不同的对象类型,以统一的接口来访问对象的行为,从而提高代码的灵活性和可扩展性。

1.多态的实现

// 定义抽象类对象和抽象类方法
abstract class Animal {
    public abstract void makeSound();
}

class Dog extends Animal {
	// 父类方法被子类重写
    @Override
    public void makeSound() {
        System.out.println("Dog: Woof!");
    }
}

class Cat extends Animal {
	// 父类方法被子类重写
    @Override
    public void makeSound() {
        System.out.println("Cat: Meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        animal1.makeSound(); // 输出:Dog: Woof!
        
        Animal animal2 = new Cat();
        animal2.makeSound(); // 输出:Cat: Meow!
    }
}

2.1上转型对象

上转型是指将一个子类的实例赋给一个父类类型的引用变量,此时父类类型的引用变量可以引用子类的实例
这种转型操作不需要显式进行类型转换,而是在编译时期进行检查,因为子类对象本身具有父类的属性和方法,所以可以使用父类类型的引用变量来引用子类对象。

// 定义抽象类对象和抽象类方法
abstract class Animal {
    public abstract void makeSound();
}

class Dog extends Animal {
	// 父类方法被子类重写
    @Override
    public void makeSound() {
        System.out.println("Dog: Woof!");
    }
}
public class Main {
    public static void main(String[] args) {
    // 建立上转型对象
        Animal animal = new Dog();
        animal1.makeSound(); // 输出:Dog: Woof!
    }
}

三、多态与继承的区别

关系:
继承:继承描述了父类和子类之间的关系,父类是子类的基类(或超类),子类继承了父类的属性和方法。
多态:多态描述了具有不同类型的对象对同一消息做出响应的能力。

实现方式:
继承:通过使用关键字extends,子类可以继承父类的属性和方法。
多态:通过使用父类的引用变量来引用子类的对象,实现多态。

作用:
继承:继承可以实现代码的重用,避免重复编写相似的代码,同时可以定义和组织类的层次结构。
多态:多态能够增加代码的灵活性和可扩展性,通过父类类型的引用变量调用子类对象的方法,可以实现动态绑定,根据实际引用的对象类型来调用相应的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值