30-Java 继承
Java 继承在本教程中我们将借助示例学习Java中的继承。继承是OOP面向对象编程的重要功能之一它使我们能够从现有类中定义一个新类。例如class Animal { // eat() 方法 // sleep() 方法 } class Dog extends Animal { // bark() 方法 }在Java中我们使用extends关键字从类继承。在这里我们从Animal类继承了Dog类。Animal是超类父类或基类而Dog是子类子类或派生类。 子类继承超类的字段和方法。is-a 关系继承是is-a关系只有当两个类之间存在is-a关系时我们才使用继承。这里有些实例汽车就是车辆。橙色是一种水果。外科医生是医生。狗是动物。示例1Java继承class Animal { public void eat() { System.out.println(I can eat); } public void sleep() { System.out.println(I can sleep); } } class Dog extends Animal { public void bark() { System.out.println(I can bark); } } class Main { public static void main(String[] args) { Dog dog1 new Dog(); dog1.eat(); dog1.sleep(); dog1.bark(); } }输出结果I can eat I can sleep I can bark在这里我们从父类Animal继承了Dog的子类。 Dog类从Animal类继承了eat()和sleep()方法。因此Dog类的对象可以访问Dog类和Animal类的成员。protected 关键字我们在先前的教程中了解了private和public访问修饰符。private 成员只能在类内访问public 成员可以从任何地方访问您还可以设置方法和字段为protected受保护的成员可以访问类内部在其子类中在同一包内这是可以访问访问修饰符的摘要。| 修饰符 |类| 包 |子类|全局|| public |Yes| Yes |Yes| Yes || private |Yes| No |No| No |protectedYesYesYesNo示例2protected 关键字class Animal { protected String type; private String color; public void eat() { System.out.println(I can eat); } public void sleep() { System.out.println(I can sleep); } public String getColor(){ return color; } public void setColor(String col){ color col; } } class Dog extends Animal { public void displayInfo(String c){ System.out.println(I am a type); System.out.println(My color is c); } public void bark() { System.out.println(I can bark); } } class Main { public static void main(String[] args) { Dog dog1 new Dog(); dog1.eat(); dog1.sleep(); dog1.bark(); dog1.type mammal; dog1.setColor(black); dog1.displayInfo(dog1.getColor()); } }输出结果I can eat I can sleep I can bark I am a mammal My color is black在这里Animal类中的类型字段受到保护。我们已经从Main类访问了这个字段dog1.type mammal;这是可行的因为Animal和Main类都在同一个包(同一个文件)中。Java方法重写从上面的示例中我们知道子类的对象也可以访问其超类的方法。如果在超类和子类中都定义了相同的方法会发生什么情况好吧在这种情况下子类中的方法将覆盖超类中的方法。例如示例3方法重写/覆盖示例class Animal { protected String type animal; public void eat() { System.out.println(I can eat); } public void sleep() { System.out.println(I can sleep); } } class Dog extends Animal { Override public void eat() { System.out.println(I eat dog food); } public void bark() { System.out.println(I can bark); } } class Main { public static void main(String[] args) { Dog dog1 new Dog(); dog1.eat(); dog1.sleep(); dog1.bark(); } }输出结果I eat dog food I can sleep I can bark在这里eat()同时出现在超类Animal和子类Dog中。我们创建了子类Dog的对象dog1。当我们使用dog1对象调用eat()时将调用Dog内部的方法而不调用超类的相同方法。这称为方法重写。在上面的程序中我们使用了Override 注释来告诉编译器我们正在重写方法。但是这不是强制性的。如果需要从Animal的子类调用eat()方法则使用super关键字。示例4super关键字class Animal { public Animal() { System.out.println(I am an Animal); } public void eat() { System.out.println(I can eat); } } class Dog extends Animal { public Dog(){ super(); System.out.println(I am a dog); } Override public void eat() { super.eat(); System.out.println(I eat dog food); } public void bark() { System.out.println(I can bark); } } class Main { public static void main(String[] args) { Dog dog1 new Dog(); dog1.eat(); dog1.bark(); } }输出结果I am an Animal I am a dog I can eat I eat dog food I can bark在这里我们使用了super关键字通过super()来调用构造函数。 另外我们使用super.eat()调用Animal超类的eat()方法。注意调用构造函数和super方法时使用的区别。继承类型继承有五种类型。单一继承- B类A仅从类继承。多级继承- B类从A类继承然后C类从B类继承。分层继承- A类作为BC和D父类。多重继承-类C从接口A和扩展B。混合继承-两种或多种继承的混合。Java不支持通过类的多重继承和混合继承。但是我们可以通过接口在Java中实现多重继承。我们将在后面的章节中了解接口。为什么要使用继承最重要的用途是代码的可重用性。父类中存在的代码无需在子类中再次编写。通过方法重写实现运行时多态。在后面的章节中我们将学习有关多态的更多信息。 福利时间如果你正在备战面试或者想要学习其他知识给大家推荐一个宝藏知识库作者整理了一些列 Java 程序员需要掌握的核心知识有需要的自取不谢。知识库地址https://farerboy.com/
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2561783.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!