网站首页 > 精选教程 正文
继承就是子类继承父类的特征和行为,使得子类对象拥有父类的实力和方法。有了继承,资源可以得到复用,提升开发效率。为了简约,Java只支持单继承。继承需要符合的关系是:is-a,父类通用,子类具体。
如果一个类没有指明父类,默认继承于 java.lang.Object类。继承类用extends关键字,继承接口用implements关键字。如果不想被继承,使用final关键字声明即可。
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中的继承和钻石问题
- 下一篇: java中的继承(二)
猜你喜欢
- 2024-11-27 JAVA面向对象的三大特征——继承
- 2024-11-27 JAVA中的注解可以继承吗?
- 2024-11-27 学长带你学习java第三课——继承
- 2024-11-27 java技术专家带你深入java核心技术:反射+继承设计技巧+枚举类
- 2024-11-27 【编程】Java中的继承和多态,你了解多少?
- 2024-11-27 Java开发:java面向对象思想之继承
- 2024-11-27 用最通俗易懂的例子讲明白继承和组合的本质区别
- 2024-11-27 java继承的概念是什么?
- 2024-11-27 java基础-3-继承
- 2024-11-27 Java小白成长记:Java如何实现封装、继承、解析解构
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)