面向对象特性

          面向对象特性
一、继承
1、概述:
在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。
2、格式
通过 extends 关键字,可以声明一个子类继承另外一个父类

[Java]  纯文本查看  复制代码
?
1
2
3
4
5
6
class 父类 {
     ...
}
class 子类 extends 父类 {
     ...
}


举例:

[Java]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
  * 定义员工类Employee,做为父类
  */
class Employee {
     String name; // 定义name属性
     // 定义员工的工作方法
     public void work() {
         System.out.println("尽心尽力地工作");
     }
}
/*
  * 定义讲师类Teacher 继承 员工类Employee
  */
class Teacher extends Employee {
     // 定义一个打印name的方法
     public void printName() {
         System.out.println("name=" + name);
     }
}
/*
  * 定义测试类
  */
public class ExtendDemo01 {
     public static void main(String[] args) {
         // 创建一个讲师类对象
         Teacher t = new Teacher();
         // 为该员工类的name属性进行赋值
         t.name = "小明" ;
         // 调用该员工的printName()方法
         t.printName(); // name = 小明
         // 调用Teacher类继承来的work()方法
         t.work();  // 尽心尽力地工作
     }
}


3、继承的好处
1.提高代码的复用性。
2.类与类之间产生了关系,是多态的前提。
4、继承后的特点
1.成员变量不重名

[Java]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Fu {
     // Fu中的成员变量。
     int num = 5 ;
}
class Zi extends Fu {
     // Zi中的成员变量
     int num2 = 6 ;
     // Zi中的成员方法
     public void show() {
         // 访问父类中的num,
         System.out.println( "Fu num=" +num); // 继承而来,所以直接访问。
         // 访问子类中的num2
         System.out.println( "Zi num2=" +num2);
     }
}
class ExtendDemo02 {
     public static void main(String[] args) {
         // 创建子类对象
         Zi z = new Zi();
         // 调用子类中的show方法
         z.show(); 
     }
}
 
演示结果:
Fu num = 5
Zi num2 = 6


2.成员变量重名

[Java]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Fu {
     // Fu中的成员变量。
     int num = 5 ;
}
class Zi extends Fu {
     // Zi中的成员变量
     int num = 6 ;
     public void show() {
         // 访问父类中的num
         System.out.println( "Fu num=" + super .num);
         // 访问子类中的num
         System.out.println( "Zi num=" + this .num);
     }
}
class ExtendsDemo03 {
     public static void main(String[] args) {
         // 创建子类对象
         Zi z = new Zi();
         // 调用子类中的show方法
         z.show();
     }
}
演示结果:
Fu num = 5
Zi num = 6


注意:
子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用super 关键字,修饰父类成员变量,类似于之前学过的 this 。
使用格式:super.父类成员变量名
3.成员方法不重名

[Java]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
class Fu{
     public void show(){
         System.out.println( "Fu类中的show方法执行" );
     }
}
class Zi extends Fu{
     public void show2(){
         System.out.println( "Zi类中的show2方法执行" );
     }
}
public  class ExtendsDemo04{
     public static void main(String[] args) {
         Zi z = new Zi();
         //子类中没有show方法,但是可以找到父类方法去执行
         z.show();
         z.show2();
     }
}


4.成员方法重名(重写override)
方法重写:子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
5、注意事项
1.子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
2.子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。
3.私有方法不能被重写(父类私有成员子类是不能继承的)
6、super和this
super :代表父类的存储空间标识(可以理解为父亲的引用)。
this :代表当前对象的引用(谁调用就代表谁)。
访问成员:
this.成员变量            --    本类的
super.成员变量            --    父类的
this.成员方法名()          --    本类的    
super.成员方法名()   --    父类的

7、继承特点
1.Java只支持单继承,不支持多继承。
2.Java支持多层继承(继承体系)。
3.所有的类都直接或者间接继承了Object类,Object类是所有类的父类。

发布了773 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/heima201907/article/details/104659784
今日推荐