专业的JAVA编程教程与资源

网站首页 > java教程 正文

第21天|Java入门有野,面向对象之继承

temp10 2024-10-03 01:30:32 java教程 10 ℃ 0 评论

继承就是子类继承父类的特征和行为,使得子类对象拥有父类的实力和方法。有了继承,资源可以得到复用,提升开发效率。为了简约,Java只支持单继承。继承需要符合的关系是:is-a,父类通用,子类具体。

如果一个类没有指明父类,默认继承于 java.lang.Object类。继承类用extends关键字,继承接口用implements关键字。如果不想被继承,使用final关键字声明即可。

第21天|Java入门有野,面向对象之继承

21.1 类的继承

在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类。类的继承用extends关键字。狗类继承动物类,就用父类的名称、编号和吃的方法。

public class Animal {
    //动物名称
    protected String name;
    //编号
    protected int num;

    public Animal(String name, int num) {
        this.name = name;
        this.num = num;
        System.out.println(name+"的编号:"+num);
    }

    public void eat() {
        System.out.println(this.name+"吃什么?");
    }

}

子类调用父类,复用父类的属性和方法。我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类,用this关键字指向自己的引用。

public class Dog extends Animal {
    public Dog() {
        super("狗", 123456);
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
    }
}

输出结果

狗的编号:123456

21.2 接口继承

接口,在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口用interface关键字声明。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。接口中定义的变量只能是public static final类型,并且默认即为public static final类型

类描述对象的属性和方法,接口则包含子类要实现的方法。接口不能用于实例化对象,没有构造方法,所有的方法都是抽象方法,接口支持多继承。接口继承接口也是用extends,类实现接口用implements关键字。

//Plant.java文件,接口:Plant(植物) 
public interface Plant {
    public void grow();

    public void conserve();
}

//Classify.java文件,接口:Classify(类别)
public interface Classify {
    public void setType(String name);
}

//Flower.java文件,同时继承Plant和Classify
public interface Flower extends Plant, Classify {
}

来个玫瑰花类实现Flower接口。一般开发工具都会提醒你要实现Flower接口里的内容。你可能会好奇接口Flower里可是什么都没有啊,要实现什么。Flower是没有,可它的父类Plant和Classify有要实现的方法。实现父类方法用@Override指定。

public class Rose implements Flower {
    @Override
    public void setType(String name) {
        System.out.println(name);
    }

    @Override
    public void grow() {
        System.out.println("若想花长得好,多晒晒太阳," +
                "不是让你多晒太阳,而是让花多晒太阳。");
    }

    @Override
    public void conserve() {
        System.out.println("花的世界需要做好相关保护错失,不要乱踩。");
    }

    public static void main(String[] args) {
        Rose rose = new Rose();
        rose.setType("玫瑰花");
        rose.grow();
        rose.conserve();
    }
}

输出结果

玫瑰花
若想花长得好,多晒晒太阳,不是让你多晒太阳,而是让花多晒太阳。
花的世界需要做好相关保护错失,不要乱踩。

21.3 抽象类

在上一节用接口时,你会发现,接口里的方法声明都是public,不能有构造方法,没有普通成员变量。如果你既想要实现类似接口的功能,又想要控制权限或声明成员变量,那你就用抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。抽象类用abstract声明。

public abstract class Employee {
    //姓名
    protected String name;
    //年龄
    protected int age;
    //入职日期
    protected int entryDate;

    //计算年假
    public abstract double computeYear();
}

如果一个类包含抽象方法,那么该类必须是抽象类。任何子类必须重写父类的抽象方法,或者声明自身为抽象类。这个和接口有类似的功效。

//计算年假
public class AskForLeave extends Employee {
    public double computeYear() {
        if (this.entryAge >= 1) {
            return 5.0;
        } else {
            return 0.0;
        }
    }

    public static void main(String[] args) {
        AskForLeave askForLeave = new AskForLeave();
        askForLeave.entryAge = 1;
        double day = askForLeave.computeYear();
        System.out.println("入职满" + askForLeave.entryAge
                + "年,年假有" + day + "天.");
    }
}

输出结果

入职满1年,年假有5.0天.

好了,有关Java继承的内容就这么多了,如果你觉得老陈这样讲还可以的话,你就转发和点赞,你的轻轻一点,就是对老陈继续创作的最大鼓励和支持。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我在分享Python,前端、Java和App方面的干货。关注我,没错的。

#Java##APP##程序员##Web##Spring#

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表