面向对象_05类的继承:extends重写父类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象_05类的继承:extends重写父类相关的知识,希望对你有一定的参考价值。

类的继承:现有类的基础上构建一个新的类,构建出来的类被称作子类,子类可继承父类的属性和方法。

什么时候定义继承?
当类与类之间存在着所属关系的时候,就定义继承。xxx是yyy中的一种==>xxx extends yyy

继承好处:
1,提高代码复用性
2,让类与类之间产生关系,给多态提供前提

单继承:一个子类只能有一个直接父类。
多继承:一个子类可以有多个直接父类(Java中不允许,进行改良)
==>不直接继承,因为多个父类中有相同成员,会产生调用的不确定性
在Java是通过“多实现”的方式来体现

继承的需注意的地方:
1,类只支持单继承,不允许多重继承,但对C++中的多继承机制进行改良。一个子类只能有一个直接父类,如下是错的继承方式
  class A{}
  class B{}
  class C extends A,B{}
2,多个子类可继承一个父类
  class A{}
  class B extends A{}
  class C extends A{}
3,多层继承类(就会出现继承体系)
==>当使用一个继承体系时:
1,查看该体系中的顶层类,了解该体系的基本功能
2,创建体系中的最子类对象,完成功能的使用
  class A{}
  class B extends A{} //类B继承A,B是A的子类
  class C extends B{} //类C继承B,C是B的子类,同是也是A的子类
4,Java中,子类父类只是相对的概念,一个类是父类的同时,也可以是另一个类的子类。如3,:B是C的父类,同时也是A的子类

Example:

 1 //继承的简单实例 
 2 package new_Object;
 3 //定义Person类
 4 class Person_09{
 5     //定义共有的属性
 6     String name;
 7     int num;
 8     //定义打印方法
 9     public void printf(){
10         System.out.println(name+"\\t"+num);
11     }
12 }
13 //学生类
14 class Student_1 extends/*继承*/ Person_09{
15     /**
16     String name;
17     int num;
18     public void speak(){
19         System.out.println(name+"\\t"+num);
20     }*/
21 }
22 //工人类
23 class Work extends Person_09{
24     /**
25     String name;
26     int num;
27     public void speak(){
28         System.out.println(name+"\\t"+num);
29     }*/
30 }
31 public class Extends_01 {
32     public static void main(String[] args) {
33         Student_1 stu=new Student_1();
34         stu.name="张三";
35         stu.num=2015112401;
36         stu.printf();
37         Student_1 work=new Student_1();
38         work.name="李四";
39         work.num=1001;
40         work.printf();
41     }
42 }

技术分享图片

继承的误区:
class DemoA{
void speak1(){}
void speak2(){}
}
class DemoB extends DemoB{
void speak1(){}
void speak3(){}
}
改良(向上抽取继承)==v
class Demo{
void speak1(){}
}
class DemoA{
//void speak1(){}
void speak2(){}
}
class DemoB extends Demo{
//void speak1(){}
void speak3(){}
}


重写父类:继承关系中,子类自动继承父类中定义的方法,有时需要在子类需要对继承方法改写。
注:在子类中重写的方法需要和父类被重写的方法具有相同的方法名,参数列表以及返回值类型

 1 //重写父类
 2 package new_Object;
 3 class Animal_02{
 4     String name;
 5     //定义总的动物叫法
 6     public void shout(){
 7         System.out.println("种类"+" "+name);
 8     }
 9 }
10 class Dog_02 extends Animal_02{
11     //单独定义狗的叫法
12     public void shout(){
13         System.out.println(name+" "+"动物发出的叫声:旺旺");
14     }
15 }
16 //定义其他动物类
17 class Horse_02 extends Animal_02{}
18 class Bird_02 extends Animal_02{}
19 public class Example02_Extends {
20     public static void main(String[] args) {
21         Dog_02 p1=new Dog_02();
22         p1.name="小狗";
23         p1.shout();/*调用的是子类的shout*/
24         //以下调用时父类的shout
25         Horse_02 p2=new Horse_02();
26         p2.name="马";
27         p2.shout();
28         Bird_02 p3=new Bird_02();
29         p3.name="鸟";
30         p3.shout();
31     }
32 }

技术分享图片

 





















































以上是关于面向对象_05类的继承:extends重写父类的主要内容,如果未能解决你的问题,请参考以下文章

面向对象——继承

java学习与应用--面向对象

面向对象 面试题

2021年大数据常用语言Scala(三十):scala面向对象 继承(extends)

Java面向对象,继承,多态

Java基础---面向对象