面向对象三大特征(二)--继承

了解继承之前先了解一下显示生活中事物与事物之间存在的两种关系:
1、整体与部分的关系--has a 关系;例如:球队和球员的关系。

代码示例如下:

 1 //球员
 2 class Player{
 3     int num;
 4     String name;
 5     public Player(int num, String name){
 6         this.num = num;
 7         this.name = name;
 8     }
 9     public void run(){
10         System.out.println(name+"开跑……");
11     }
12 }
13
14 //球队
15 class Team{
16     String name;
17     Player p;
18     public Team(String name, Player p){
19         this.name = name;
20         this.p = p;
21     }
22     public void startGame(){
23         System.out.println(name+"开赛了");
24     }
25 }
26
27 class Demo{
28     public static void main(String[] args){
29         Player p = new Player(12,"梅西");
30         Team t = new Team("巴西",p);
31         t.startGame();
32         System.out.println("上场球员名字:"+t.p.name);
33     }
34 }

2、继承的关系--is a 关系;例如:人类和学生的关系。

继承是通过关键字extends体现的,格式如下:
class 子类名 extends 父类名{
}

代码示例如下:

 1 // 人类
 2 class Person{
 3     String name;
 4     public Person(String name){
 5         this.name = name;
 6     }
 7     public Person(){
 8         System.out.println("Person类的构造方法被调用了......");
 9     }
10     public void eat(){
11         System.out.println(name+"在吃饭.....");
12     }
13 }
14
15 //学生类
16 class Student extends Person{
17     int num;
18     public Student(){
19         System.out.println("Student类的构造方法被调用了");
20     }
21     public void study(){
22         System.out.println(name+"正在学习....");
23         System.out.println(name+"的学号是"+num);
24     }
25 }
26 class Demo{
27     public static void main(String[] args){
28         Student s = new Student();
29         s.name = "狗娃";
30         s.num = 123456;
31         s.eat();
32         s.study();
33     }
34 }

继承要注意的事项:
    1. 千万不要为了减少重复代码而去继承,只有真正存在着继承关系的时候才去继承。
    2. 父类私有的成员不能被继承。
    3. 父类的构造函数不能被继承。
    4. 创建子类对象时默认会先调用父类无参的构造函数。

super关键字:
super关键字代表了父类空间的引用。

super关键字的 作用:
    1. 子父类存在着同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。
    2. 创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。

super关键字调用父类构造方法要注意的事项:
    1. 如果在子类的构造方法上没有指定调用父类的构造方法,那么java编译器会在子类的构造方法上面加上super()语句。
    2. super关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句。
    3. super与this关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要第一个语句。

super关键字与this关键字的区别:
    1. 代表的事物不一致。
            1. super关键字代表的是父类空间的引用。    
            2. this关键字代表的是所属函数的调用者对象。
    2. 使用前提不一致。
            1. super关键字必须要有继承关系才能使用。
            2. this关键字不需要存在继承关系也可使用。
    3. 调用构造函数的区别:
            1. super关键字是调用父类的构造函数。
            2. this关键字是调用本类的构造函数。
            
方法重写
方法重写的前提: 必须要存在继承的关系。

方法的重写: 子父类出了同名的函数,这个我们就称作为方法的重写。

什么是时候要使用方法的重写:父类的功能无法满足子类的需求时。

方法重写要注意的事项:
    1.方法重写时, 方法名与形参列表必须一致。
    2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。
    3.方法重写时,子类的返回值类型必须要小于或者 等于父类的返回值类型。
    4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。
            Exception(最坏)
            RuntimeException(小坏)

super关键字的使用和重写代码示例如下:

 1 class Fu{
 2     int x = 10;
 3     String name;
 4     public Fu(){
 5         System.out.println("Fu类的无参构造方法");
 6     }
 7
 8     public Fu(String name){
 9         this.name = name;
10         System.out.println("Fu类的有参构造方法");
11     }
12     public void eat(){
13         System.out.println("Fu类对象正在吃");
14     }
15 }
16
17 class Zi extends Fu{
18     int x = 20;
19     public Zi(String name){
20         super(name); //调用父类的有参构造方法
21         System.out.println("Zi类带有参数的构造方法");
22     }
23     public Zi(){ //jvm会默认调用父类的无参构造方法
24         System.out.println("Zi类无参的构造方法");
25     }
26     public void print(){
27         System.out.println("Zi类中的 x = "+x);
28         System.out.println("Fu类中的 x = "+super.x); //获取子父类中同名的父类变量
29     }
30     public void eat(){ //方法重写
31         System.out.println("zi类在吃饭。。。");
32     }
33 }
34
35 class Demo{
36     public static void main(String[] args){
37         Zi z = new Zi();
38         Zi z2 = new Zi("张三");
39         z2.print();
40         z2.eat();
41     }
42 }

java是单继承。

一个类最多只能有一个直接的父类。但是有多个间接的父类

final(最终、修饰符)  
    
final关键字的用法:
    1. final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的。
    2. fianl关键字修饰一个引用类型变量时,该变量不能重新指向新的对象。
    3. final关键字修饰一个函数的时候,该函数不能被重写。
    4. final关键字修饰一个类的时候,该类不能被继承。

常量的修饰符一般为: public static final

常量的命名规范:全部字母大写,单词与单词 之间 使用下划线分隔。

时间: 2024-10-19 06:33:34

面向对象三大特征(二)--继承的相关文章

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

面向对象三大特征之继承(extends)——Java笔记(六)

继承: 从一般到特殊的关系,是一种拓展关系,子类对象是父类的一种,也可称为”is a“的关系 泛化: 把子类里的共性抽取到父类里的来的过程 特化: 子类在父类的基础上上定义了自己特有的行为特征的过程 格式: 修饰符 class SubClass extends SuperClass{ } SubClass :导出类.继承类.子类 SuperClass:父类.基类.超类.源类 子类SubClass通过extends来继承父类SuperClass 继承是通过extends来实现的 继承提高了代码的复

面向对象三大特征之 继承

继承的作用:扩展已有的类的功能,实现代码的复用 语法: class 子类 extends 父类(){ 类体 } class person{ private string name; private int age; } public String setName(){ name=n; } public int setAge(){ age=a; } public void setAge(int a){ if(a>=0 && a<=100){ age=a; } } public S

【原生js】js面向对象三大特征之继承笔记

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 7 </head> 8 <script> 9 //中学生 10 function MidStu(name,age){ 11 this.name=name; 12 this.ag

面向对象三大特征之继承

一.继承 使用要点: 1.父类也称作超类.基类.派生类等. 2.Java中只有单继承,没有像C++那样的多继承.多继承会引起混乱,使得继承链过于复杂,系统难于维护.(类只有单继承,接口有多继承) 3.Java中类没有多继承,接口有多继承. 4.子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法). 5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object. package cn.s; public

PHP面向对象三大特征

<?php//PHP 面向对象三大特征 封装 继承 多态 <抽象> //封装 /** * @author bin * *//* class Person{ //encapsulate private $name; private $age; //这个就好比我们Java中的get set 想spring注入的 通过通过set方法 通过构造函数 一样 public function __set($columnName,$value){ $this->columnName = $valu

c++面向对象三大特征封装、继承和多态知识总结

面向对象三大特征:封装,继承,多态: 一.封装:该公开的就公开话,该私有的就隐藏掉,主要是由public,private实现:作用是便于分工和分模块,防止不必要的扩展: 二.继承:就是一种传承,可以把父类型中的数据传承到子类中,子类除了传承了父类的数据之外,还可以对父类型进行扩展: 公开继承  public 保护继承  protected 私有继承  private 保护成员:在子类和本类中可以访问,其他不行: 1.公开继承:在公开继承下,父类型中的数据是公开的到子类型中权限是公开的:父类型中保

(一)Python入门-6面向对象编程:07面向对象三大特征(封装、继承、多态)-继承

一:面向对象三大特征介绍 Python是面向对象的语言,也支持面向对象编程的三大特性:继承.封装(隐藏).多态. 封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法.相当于将“细节封装起来”,只 对外暴露“相关调用方法”. 通过前面学习的“私有属性.私有方法”的方式,实现“封装”.Python 追求简洁的语法,没有严格的语法级别的“访问控制符”,更多的是依靠程序员自觉实现. 继承 继承可以让子类具有父类的特性,提高了代码的重用性. 从设计上是一种增量进化,原有父类设计不变的情况下,可以

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

JAVA学习--面向对象的特征二:继承性

* 一.面向对象的特征二:继承性 * 1.为什么要设计继承性?  *  * 2.通过"class A extends B"类实现类的继承.  *   子类:A  父类(或基类 SuperClass):B  *     * 3.子类继承父类以后,父类中声明的属性.方法,子类就可以获取到.  *    明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接  *        调用罢了.  *   子类除了通过继承,获取父类的结构之外,还可以定义