Java 中的继承是对象导向编程的核心概念之一. Java 继承是当我们有对象之间的关系时使用的。
继承在Java
在Java中,继承是通过继承其他类来创建类间的等级。
Java 继承是过渡的 - 所以如果赛坦延伸汽车和汽车延伸车辆,那么赛坦也继承了车辆类。
继承在 Java 应用中被广泛使用,例如扩展 Exception 类以创建一个包含更多信息的应用特定的 Exception 类,例如 NullPointerException。
Java 继承的例子
java 中的每一个类 implicitly extends 'java.lang.Object' class. 因此,object 类位于 java 的继承层次的顶层。
让我们用一个简单的例子来实现Java中的继承。
超级类:动物
1package com.journaldev.inheritance;
2
3public class Animal {
4
5 private boolean vegetarian;
6
7 private String eats;
8
9 private int noOfLegs;
10
11 public Animal(){}
12
13 public Animal(boolean veg, String food, int legs){
14 this.vegetarian = veg;
15 this.eats = food;
16 this.noOfLegs = legs;
17 }
18
19 public boolean isVegetarian() {
20 return vegetarian;
21 }
22
23 public void setVegetarian(boolean vegetarian) {
24 this.vegetarian = vegetarian;
25 }
26
27 public String getEats() {
28 return eats;
29 }
30
31 public void setEats(String eats) {
32 this.eats = eats;
33 }
34
35 public int getNoOfLegs() {
36 return noOfLegs;
37 }
38
39 public void setNoOfLegs(int noOfLegs) {
40 this.noOfLegs = noOfLegs;
41 }
42
43}
动物是这里的基本类,让我们创建一个从动物类继承的猫类。
主条目:猫
1package com.journaldev.inheritance;
2
3public class Cat extends Animal{
4
5 private String color;
6
7 public Cat(boolean veg, String food, int legs) {
8 super(veg, food, legs);
9 this.color="White";
10 }
11
12 public Cat(boolean veg, String food, int legs, String color){
13 super(veg, food, legs);
14 this.color=color;
15 }
16
17 public String getColor() {
18 return color;
19 }
20
21 public void setColor(String color) {
22 this.color = color;
23 }
24
25}
请注意,我们正在使用扩展
的关键字来实现Java中的继承。
Java遗产测试计划
让我们写一个简单的测试类来创建一个猫对象,并使用一些方法。
1package com.journaldev.inheritance;
2
3public class AnimalInheritanceTest {
4
5 public static void main(String[] args) {
6 Cat cat = new Cat(false, "milk", 4, "black");
7
8 System.out.println("Cat is Vegetarian?" + cat.isVegetarian());
9 System.out.println("Cat eats " + cat.getEats());
10 System.out.println("Cat has " + cat.getNoOfLegs() + " legs.");
11 System.out.println("Cat color is " + cat.getColor());
12 }
13
14}
出发点:**
猫类没有getEats()
方法,但程序仍然有效,因为它是从动物类继承的。
重要点
- 联合国 代码再利用是继承最重要的好处,因为子阶级继承了超阶级的变数和方法. (- )2. [私 (/community/tourics/java-access-modifers) 超阶级的成员不能直接进入子阶级. 与这个例子一样,Cat类无法访问Animal变量 noOffLegs,但可以通过Getter和setter方法间接访问.
- 拥有默认访问权限的超级阶级成员,只有在同一包中才能进入子阶级.
- 超级阶级[建 (/community/相/相/相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相 (英语). 5. 如果超级类没有默认的构造器,那么子类还需要定义一个明确的构造器. 否则它会推出编译时间例外 。 在子类构造器中,调用超类构造器在这种情况下是强制性的,它应该是子类构造器中的第一个语句.
- 贾瓦不支持多遗产,子类只能延伸出一等. 动物类含蓄地扩展了对象类,而猫类则扩展了动物类,但由于java继承的过渡性,Cat类也扩展了. 对象类. ( (英语). 7. 我们可以创建子类实例,然后将其分配到超级类变量,这叫做upcasting. 下面是上传的简单例子:
Cat c = 新 Cat ();///subclass ext 动物 a = c;//upcasting,由于Cat也是动物
- 当一个"超级阶级"的例子被分配到一个子阶级变量时,就叫做"下架". 我们得把它明确投给亚类 例如;
QQ
Cat c = 新 Cat ();
动物 a = c;
Cat c1 = (Cat) a; /// 显性地铸造,由于"c"实际上属于 Cat
QQ注意:编译者即使做错了也不会抱怨,因为明确的铸造. 以下是在运行时将
ClassCastException
投放的一些案例。 ) 狗 d = 新狗 (); 动物 a = d; Cat c1 = (Cat) a; /// ClassCast Exception at runtime
动物 a 1 = 新动物 (; Cat c2 = (Cat) a; ///ClassCast Excition 因为 a1 在跑道时间
19. 我们可以推翻超级阶级在子阶级中的方法. 然而,我们总是应该用[@Override 注释](/community/tutoris/java-overried-method-overriding)来说明被推翻的方法。 编译器会知道,我们正在压倒一种方法,如果超类方法发生某种变化,我们就会得到一个编译时间错误,而不是在运行时间得到不想要的结果. (_ MKBR1_)10 (英语). 我们可以使用**超级**关键词调用超级方法并访问超级变量. 当我们在子类中拥有同名变量/方法时,它就变得有用了,但我们希望访问超等变量/方法. 当构造器在超类和子类中被定义时,这也被使用,我们必须明确称超类构造器. (_ MKBR1_)11 (英语). 我们可以使用`执行'指示来检查对象之间的继承,让我们以下文的例子来看。 (_ MKBR1_) QQ
2Cat c = 新 Cat (;
3狗 d = 新 Dog ();
4动物 a = c;
5
6布尔旗 = ccleof Cat; // 正常例, 返回真
7
8旗帜 = c例动物; // 返回真自 c- a 动物太
9
10旗帜 = a 例猫; /// 返回真自类型 运行时的猫
11
12旗帜 = a example of Dog; // 为明显的原因返回虚假. (_ MKBR1_)``` (-MKBR1_) 12. 在java.
1313中不能延长期末班. 如果您不打算在代码中使用Superclass,即您的Superclass只是保留可再用代码的基础,那么您就可以保留它们作为[Abstract class](/community/tourics/abstract-class-in-java)来避免客户类不必要的即兴. 它还将限制基类的创建实例。 (_) MKBR1_ (英语)
14
15### Java 遗产视频教程
16
17我最近在YouTube上发布了两个视频,详细解释了继承与样本程序,你应该在下面观看它们。
18
19[youtube -b08i7w163o 360 480]
20
21[YouTube LQtixOFQHM 360 480]
22
23您可以从我们的 [GitHub 存储库](https://github.com/journaldev/journaldev/tree/master/CoreJavaProjects/CoreJavaExamples/src/com/journaldev/inheritance)中查看更多遗传示例。
24
25参考: [Oracle 文档](https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)