java继承

1.继承的基础概念

继承是面向对象编程中的一个核心概念,它允许我们定义一个基础类(也称为父类或基类),然后创建新的类(子类或派生类)来继承这个基础类的属性和方法。这样,子类就可以重用、扩展或修改从父类继承的行为。在Java中,继承通过extends关键字实现。

例子:


如果我们有一个Animal类,它可以有声音属性和移动方法,那么我们可以创建一个Dog类来继承Animal类,并添加特定于狗的行为,如woff方法。这样,Dog类就拥有了Animal类的所有属性和方法,并且还可以有自己的独特功能。
这里是一个简单的例子:
// 父类
public class Animal {
    protected String sound;

    public Animal(String sound) {
        this.sound = sound;
    }

    public void move() {
        System.out.println("This animal moves.");
    }

    public void makeSound() {
        System.out.println(sound);
    }
}

// 子类
public class Dog extends Animal {
    // 使用super关键字调用父类的构造函数
    public Dog(String sound) {
        super(sound);
    }

    // 子类可以覆盖父类的方法
    @Override
    public void makeSound() {
        // 覆盖父类的方法以改变行为
        System.out.println("The dog barks: " + sound);
    }

    // 子类也可以添加新的方法
    public void woof() {
        System.out.println("Woof!");
    }
}

在这个例子中,Dog类继承了Animal类,并重写了makeSound方法来改变其行为,同时添加了一个新的woff方法。这种设计使得代码更加模块化,易于维护和扩展。

2.抽象类和接口

抽象类和接口都是Java中用于实现抽象的机制,但它们之间有一些关键的区别:
1.定义:1.抽象类是一个不能被实例化的类,通常用作其他类的基类。它可以用abstract关键字声明。
2.接口是一种完全抽象的结构,包含一组方法名,但没有实现,用interface关键字声明。
3.成员:1.抽象类可以包含具体的方法实现,也可以包含字段和静态方法。
2.接口只能包含抽象方法(没有方法体)和默认方法、静态方法以及常量。
3.多重继承:1.Java不支持多个类继承,即一个类只能继承自一个抽象类。
2.一个类可以实现多个接口。
3.访问修饰符:1.抽象类的方法可以有不同的访问权限(private,  default,protected ,public)。
2.接口中的所有方法默认都是public的,而且必须是抽象的。
3.构造器:1.抽象类可以有构造器,用于初始化其字段。
2.接口中不能有构造器。
3.变量:1.抽象类可以有实例变量和静态变量。
2.接口只能有常量,它们默认是public static final的。
3.继承关系:1.抽象类可以有具体的子类,这些子类必须实现抽象类中的所有抽象方法,除非子类也是抽象的。
2.实现接口的类必须提供接口中所有声明的方法的具体实现。
3.用途:1.抽象类通常用于“is-a”关系,当你需要共享代码并且知道一些具体信息时。
2.接口用于“like-a”关系,当不同的类执行相同的功能但方式不同,或者当你想要确保某些类提供一组特定的方法时。
实例:
抽象类:
public abstract class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public void eat() {
        System.out.println(name + " is eating.");
    }

    // 抽象方法,需要在子类中实现
    public abstract void makeSound();
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println(name + " says Woof!");
    }
}

接口:
public interface Drawable {
    void draw(); // 抽象方法

    default void color() { // 默认方法
        System.out.println("Default coloring");
    }

    static void allDrawables() { // 静态方法
        System.out.println("Drawing all drawable objects");
    }
}

public class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }

    // 可以重写Drawable接口的color方法
    @Override
    public void color() {
        System.out.println("Coloring the circle");
    }
}

在这两个例子中,Animal是一个抽象类,它有一个具体的eat方法和一个抽象makeSound方法。Dog类继承自Animal并实现了makeSound方法。而Drawable是一个接口,它有一个抽象方法draw和一个默认方法color,以及一个静态方法allDrawables。Circle类实现了Drawable接口并提供了draw方法的具体实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值