(十)Core Java 面向对象(封装,继承,多态,接口) -01 (95)

 目录 :         
1 ) .  面向对象(概述)

2 ) .   面向对象(举例)

3 ) .    面向对象(类与对象的关系)

4 ) .  面向对象(成员变量与局部变量)

5 ) .   面向对象(匿名对象的应用)

6 ) .     面向对象(封装-概述)

7 ) .   面向对象(封装private)

8 )    面向对象(构造函数)

9 ).   面向对象(构造代码块)

10 ).  面向对象(this关键字)

11 ).  面向对象(this关键字的应用)

12 ).  面向对象(this关键字在构造函数间调用)

13 ).  面向对象(static关键字)

14 ) .  面向对象(main函数)

15 ).  面向对象(静态什么时候使用)

16 ). 面向对象(静态的应用-工具类)

17 ). 面向对象(帮助文档的制作javadoc)

18 ). 面向对象(静态代码块)

19 ). 面向对象(对象的初始化过程)

20 ). 面向对象(对象调用成员过程)

21 ). 面向对象(单例设计模式方式一)

22 ). 面向对象(单例设计模式方式二)

 


     一 .  面向对象(概述)

1 ) . 相关要点 : 

1.1 面向对象概念

1.2 类与对象的关系

1.3  封装

1.4  构造函数

1.5  this关键字

1.6  static关键字

1.7  单例设计模式

2 ) .  面向对象概念  :

2.1 理解面向对象

[1] 面向对象是相对面向过程而言

[2] 面向对象和面向过程都是一种思想

[3] 面向过程-->强调的是功能行为

[4] 面向对象-->将功能封装进对象,强调具备了功能的对象

[5] 面向对象是基于面向过程的

2.2 面向过程与面向对象的区别 : 

[1]   面向过程强调功能命令,面向对象强调对象实体

[2]   从面向过程到面向对象是复杂程度简单化的过程,也可以理解为对象是一种特定的结果,而过程是对细节的定义

[3]    万物皆对象,也可以理解为你所看到的可以定义的一切都是对象

 

小结 :  

             1.  功能封装成实体,封装功能是面向过程,操作实体是面向对象的,面向对象开发就是依据对象找功能 !


        
     

       二. 面向对象(举例)


1 ) . 案例理解  :

1.1 案例理解一 :  冰箱的打开存储关闭的过程  --> 行为方式

[1] 面向过程 : 打开冰箱-->     存储货物进冰箱--> 关闭冰箱   :  操作的功能  -->执行者

[2] 面向对象 : 冰箱打开-->  冰箱存储  -- >  冰箱关闭           :  操作的对象 --> 指挥者  

1.2   案例理解二 :   如何在沙漠里种水稻?  -->思维方式
 
[1]  面向过程 : 查阅资料--> 学习技术-->计划准备 -->风险预估 --> 开始实施 -->  流程控制 --> 质量管理 -->  完成操作   :  风险很大,因为 技术不一定成熟

[2] 面向对象 :  寻找专家--> 风险评估 --> 成 : 交由办理  ;  不成 : 及时 止损  ,退出 !  -->  成 :  成本验收 --> 完成操作 :  风险较小 ,因为 从内部依赖到外部  

1.3 案例理解三 :  一家知名互联网公司解决员工餐饮问题?     :               内部管理成本--> 外部的交易成本

[1] 面向过程 :  招募员工 --> 前期培训 --> 成本控制--> 人员分配 --> 店铺入驻  --> 流程控制--> 质量管理--> 日常行为 :   开饭啦   --> 饭菜反馈...

[2] 面向对象 :  寻找优质平台 --> 进行合作--> 商家入驻 --> 日常行为 : 开饭啦   --> 饭菜反馈--> 平台商家调整 


2 ) . 面向对象对应到程序的理解 : 

2.1 我们开发时不是先定义功能,而是先寻找对象,站在巨人的肩膀上会看的更远

2.2 我们开发时不是先定义功能,而是先定义对象, 以结果为导向的开发会更便捷

2.2 我们开发时最后再 定义功能,而后完成功能封装进对象,完成接口抽取调用

 

小结 :  

             1.  我们是依据对象找功能,而不是依据功能找对象
        
 

      三.   面向对象(类与对象的关系)

1 ) . 案例提炼  : 人开门  -->名词提炼法

1.1 人   -->对象

[1]  .开()  :  方法-->调用动作(接口)

1.2 门   -->对象

[1]  开()  :  操作门轴,扇叶等  -->动作(功能)

2 ) . 面向对象的三大特征 : 

2.1 特征--> 以不同的维度去描绘一个实体,使你的脑海中形成影像的一种方式

2.2 三大特征 : 

[1] 封装

[2] 继承

[3] 多态

3 ) .  类和对象的关系 : 

3.1 类 :     -->   对现实生活中事物(对象)的描述

3.2 对象 : --->  就是这类 事物,实实在在存在的个体

3.3 关系 : --> 相对于计算机而言,先有类后有对象;相对于开发而言,先有对象,后有类

3.4 提取 : --> 提取不同对象的共性特征,即为对具体的抽象(抽的是类型,特征)

3.5. 映射到java: --> 描述就是class定义的类,具体对象就是对应java在堆内存用new建立的实体 -->  描述事物就是在描述事物的属性(变量)和行为(方法),也就是java中的定义类  

4 ) . 关系案例解析:  图纸  和 汽车

4.1 图纸 --> 用来描述汽车的类

4.2 汽车 --> 依据描述建造的实体

5 ). 事物的两部分 :  属性(变量) ,行为 (函数,方法)  ,共同是java类中的成员(成员变量,成员函数)

6 ). 基本操作简述 : 

6.1 Car c=new Car() ;   -->  C就是一个类类型变量, 指向实体(对象) --> 类类型对象通过内存地址值操作使用堆内存当中的实体

6.2 c.color="red";    -->  更改对象属性的方式 :   对象.对象成员变量 ="新值" ;

6.3 c.run();    --> 调用行为(方法)的方式 :  对象.对象成员函数() ;
 
小结 :  

             1.  开发就是不断寻找对象的过程,若没有对象,即创建对象  --> 找对象,建对象,用对象,并维护对象之间的关系
        
           2.  何为对象?  --> 对象就是多个功能的封装,在java中如何产生对象,即为 new 

           3. java中可以通过多个引用指向同一个对象,对象的特点在于封装数据,也就是封装属性

      

    四. 面向对象(成员变量与局部变量)

1 ) . 成员变量与局部变量的区别 : 

1.1 作用域的不同 :  --> 成员变量作用于整个类,而局部变量作用于方法(函数)或语句中

1.2 内存存储位置的不同 : --> 成员变量存储在堆内存中,因为对象的存在而存在;而局部变量存在于栈内存中  

 
  五 .  面向对象(匿名对象的应用)

1 ) . 简述 : --> 匿名对象就是对象的简化形式

2 ) . 匿名对象的两种使用情况 : 

2.1 当对对象仅进行一次调用时

2.2 匿名对象可以作为实际参数进行传递

3 ) .  匿名对象与实体对象javad代码的区别 : 

3.1  实体对象 :  Car c  = new Car();     c. num =5 ;

3.2   匿名对象 :   new Car().num=5 ;

3.3 匿名对象调用方法时有意义,而调用属性是没有意义的,如同 造汽车没人用一样,没价值 

 
小结 :  

             1.  匿名对象与实体对象之间的区别在于没名字
        
       

       六.  面向对象(封装-概述)


1 ) . 简述 : 

1.1 概念 : 指隐藏对象的属性和实现细节,仅对外提供公共访问方式

1.2 好处 : 

[1] 将变化隔离

[2] 便于使用

[3] 提供重中性

[4] 提高安全性

1.3 封装原则 : 

[1] 将不需要对外提供的内容隐藏起来

[2] 把属性都隐藏,提供公共方法对其访问

 

小结 :  

             1.  使用框架无需了解原理,而封装框架需要了解原理
        
        

      七.  面向对象(封装private)

1 ) . private : 

1.1 概念 :  是一个私有,权限修饰符 --> 用于修饰类中的成员(成员变量,成员函数)

1.2 作用域 :   被私有化的成员变量仅在本类中有效  ,就算外界建立了对象也不能直接访问

1.3 访问方式 :  封装进方法

1.4 常用之一 :  将成员变量私有化,对外提供对应的set,get方法对其进行访问,提高对数据访问的安全性


 
小结 :  

             1.  私有化仅仅是封装的一种表现形式,另对外提供访问方式是,可在访问方式(方法)中进行逻辑判断,提高代码的健壮性
        
       
 

     八  面向对象(构造函数)

1 ) . 特点 : 

1.1 函数名与类名相同

1.2 不用定义返回值类型

1.3 不可以写return语句

2 ) . 作用  :  给对象进行初始化

3 ) .  注意 : 

3.1 默认构造函数的特点

3.2 多个构造函数是以重载的形式存在的

4 ) . 构造函数和一般函数的区别?

[1]  写法的不同

[2] 运行上的不同,构造函数在对象一建立就运行,给对象初始化,而一般函数在对象调用才执行,给对象添加应具备的功能

[3] 操作次数的不同,构造函数只运行一次,而一般函数可以被对象调用多次

5 ). 何时定义构造函数?  -->  当分析事物时,该事物存在具备一些特征或者行为,那么这些内容定义在构造函数中


 
小结 :  

             1.  对象一建立就会调用与之对应的构造函数,用来给对象进行初始化
        
           2.  当类中没有定义构造函数时,系统会默认给类加入一个空参的构造函数 ;当类中定义了构造函数时,默认的构造函数消失

       
          
  九 .   面向对象(构造代码块)

1 ) . 作用 :  给对象进行初始化,在对象建立时就运行,而且优先于构造函数执行

2 ) . 构造代码块与构造函数的区别 :  构造代码块作用于同一类中的所有对象,而构造函数是作用于相对应的对象

3 ) .  构造函数中定义抽取的的是不同对象中共性的初始化内容

  

       十. 面向对象(this关键字)


1 ) .   this  : --> 看上去,是用来区分局部变量和成员变量同名情况 

2 ) . this 代表本类对象,具体代表它所在函数所属对象的引用--> 通俗讲 哪个对象在调用this所在的函数,this就代表哪个对象 

 

      十一. 面向对象(this关键字的应用)

1 ) .当类中定义功能,该函数内部要用到调用该函数的对象时, 这时用this来表示这个对象

2 ) . 但凡本类功能内部使用了本类对象,都要用this表示

 

     十二 面向对象(this关键字在构造函数间调用)

1 ) . this语句 :  用于构造函数之间进行互相调用

2 ) . this语句只能定义在构造函数的第一行,因为初始化要先执行

3 ). this函数的两种用法,一种用来区分成员与局部变量,一种用来构造函数之间互相调用

 
 
小结 :  

             1.  this不能出现在一般函数中,只能出现在构造函数间
        
   
  十三 .  面向对象(static关键字)

1 ) . 简述 :

1.1 概念 : 用于修饰成员(成员变量和成员函数)

1.2 被修饰后的成员具备以下特点 : 

[1] 随着类的加载而加载,随着类的消失而消失,说明它的生命周期最长

[2] 优先于对象存在,意思是 静态先存在,对象而后存在

[3] 被所有对象所共享

[4] 可以直接被类名调用

1.3使用注意 : 

[1] 静态方法只能访问静态成员-->非静态方法既可以访问静态也可以访问非静态

[2] 静态方法中不可以定义this.super关键字 -->因为静态优先于对象存在,因此静态方法中不可以出现this

[3] 主函数是静态的 
     
  
2 ) . 方法区/共享区/数据区 --> 内存  类中的方法和类中的共享数据

3 ) .  成员变量=实例变量 ;  静态的成员变量=类变量

4 ) . 实例变量和类变量的区别:

[1] 存放位置    --> 类变量随着类的加载存在于方法区中,实例变量随着对象的建立而存在于堆内存中


[2] 生命周期  -- > 类的生命周期最长,随着类的消失而消失; 实例变量生命周期随着对象的消失而消失


5 ). static 的好处和弊端 :

[1] 好处 :  对对象的共享数据进行单独空间的存储,节省空间,没必要在每一个对象中都存一份  ;   可以使用类名直接调用

[2] 弊端 :  生命周期过长  ;访问出现局限性(静态只能访问静态)


小结 :   

             1.  特有数据随着对象在堆内存中存储
        
           2.  被静态修饰后的变量不仅可以被对象调用,还可以被类直接调用

   

       十四. 面向对象(main函数)

                                                       public static void main (String[]  args)  


1 ) . 简述 : 主函数 --> 是一个特殊的函数,作为程序的入口,可以被jvm调用  ; 主函数的格式是固定的,由jvm识别

2 ) . 主函数的定义 : 

[1] public  : 代表着该函数的访问权限是最大的

[2] static  :  代表主函数随着类的加载就已经存在了

[3] void  :  主函数没有具体的返回值

[4] main :  不是关键字,但是是一个特殊的单词,可以被jvm识别

[5] (String[] args) ; 函数的参数,参数类型是字符串类型的数组,也指数组中的元素是字符串  ;  jvm 在调用主函数时,传入的是new  String[0];

 
小结 :  

             1.  主函数中可以传入参数,默认传入的是 java运行时传入的类名,打印出来的是类数据地址
        
       
      十五. 面向对象(静态什么时候使用)

1 ) . 何时使用静态 ? 从两方面下手 :  成员变量和函数

2 ) .  何时定义静态变量(类变量)?    --> 当对象中出现共享数据时,该数据被静态所修饰 ,静态汇总的特有数据要定义成非静态存在于堆内存中

3 ) .  何时定义静态函数?   -->  当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的



     十六 面向对象(静态的应用-工具类)

1 ) . 简述 :  每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,一遍复用 

2 ) . 建立ArrayTool工具类对数组进行操作的常见问题 : 

[1] 对象是用于封装数据的,可是ArrayTool对象并未封装特有数据

[2] 操作数组的每个方法都没有用到ArrayTool对象中的特有数据,因为可以将ArrayTool的方法定义为static,直接通过类名调用

[3] 方法静态后以便于使用,但是该类该可以通过其他程序建立对象,为了严谨,让其不能建立对象,可以通过构造函数私有化完成

3 ) .  代码示例 : 

class ArrayText
{
    public static void main(String[] args)
    {
        
        int[] arr={1,2,3,4,2,3,2,3,2,3,12};
        
        int max=ArrayTool.getMax(arr);
        
        ArrayTool.bubbleSort(arr);
        
        
        ArrayTool.printArray(arr);
        
        
        //System.out.print(arr);
        
        
    }    
    
    
}
class ArrayTool
{
    //私有化无参构造,使其不能创建对象
    private ArrayTool(){};
  
    
    //获取最大值
    
    //1.返回值 int
    
    //2.参数列表 int[]
    
    public static int getMax(int[] arr)
    {
        int max=0;
        
        for(int i=1;i<arr.length;i++){
            
            if(arr[i]>arr[max])
                max=i;
            
        }
        
        return arr[max];
    }
    
    //获取最小值
    
    //1.返回值 int
    
    //2.参数列表 int[]
    
    public static int getMin(int[] arr)
    {
        int min=0;
        
        for(int i=1;i<arr.length;i++){
            
            if(arr[i]<arr[min])
                min=i;
            
        }
        
        return arr[min];
    }
    
    
    //查询排序
    
    //1.返回值void
    
    //2.参数列表 int数组
    
    public static void bubbleSort(int[] arr)
    {
        for(int i=0;i<arr.length-1;i++)
        {
            for(int y=0;y<arr.length-i-1;y++)
            {
                if(arr[y]>arr[y+1])
                {
                    swap(arr,y,y+1);
                }
                
            }
            
        }
        
    }
    
    
    //交换
    
    //1.没有返回值void
    
    //2.参数列表  数组和两个int参数
    
     private static void swap(int[] arr ,int a,int b)
     {
         int temp=arr[a];
         arr[a]=arr[b];
         arr[b]=temp;
        
     }
    
    //输出数组
        
    //1.返回值没有void
    //2.参数列表 数组int
    
public static void printArray(int[] arr)
{
    System.out.print("[");
    
    for(int i=0;i<arr.length;i++)
    {
        if(i!=arr.length-1)
            System.out.print(arr[i]+",");
        else
            System.out.print(arr[i]+"]");
        
    }
    
}
    
    
    
    
}

 
  十七 .  面向对象(帮助文档的制作javadoc)

1 ) . 步骤 : 

1.1 第一步 : 编写工具类,并在类上/方法上/使用 文档注释标注

1.2 第二步 : 进入 dos窗口. 通过 命令  :   javadoc -d 指定目录名 -author -version java文件 ---用来 生成 java帮助文档 ;   

示例 : javadoc -d MyHelp -author -version ArrayTool.java


2 ) . 帮助文档=说明文档=API文档

 
小结 :  

             1.  默认构造函数的权限是随着类权限的变化而变化的
        
           2.  API帮助文档就是通过javadoc制作的

  

       十八. 面向对象(静态代码块)


1 ) . 静态代码块格式 : 

static
{
    静态代码块中的执行语句
}

2 ) . 静态代码块特点 :  --> 随着类的加载而执行,只执行一次,用来给类进行初始化的

 
小结 :  

             1.  静态代码块给类初始化,构造代码块给对象初始化,构造函数给对应对象初始化
        
 


      十九. 面向对象(对象的初始化过程)

1 ) . 创建对象的初始化过程 :     Person  person  =new  Person("张帅",20);

1.1  第一步:因为new 用到了class文件,因此 class文件通过jvm加载进内存    , person名入栈 ,  实体对象入 堆 并开辟空间

1.2  第二步 : 静态代码块被执行,若有的话,那么就会给Persion.class类进行初始化

1.3  第三步 : 在堆内存中开辟空间,分配内存地址

1.4 第四步 : 在堆内存中建立对象的特有属性,并进行默认初始化

1.5 第五步 : 对属性进行显示初始化

1.6 第六步 : 对对象进行构造代码块初始化

1.7 第七步 : 对对象进行对应的构造函数  初始化

1.8 第八步 : 将内存地址赋给栈内存中的P变量

 

     二十 面向对象(对象调用成员过程)

1 ) . 堆区:

1.1 存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)

2.1 jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和 对象引用 ,只存放对象本身

2 ) . 栈区 : 

2.1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中

2.2.每个栈中的数据(原始类型和 对象引用 )都是私有的,其他栈不能访问。

2.3 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

3 ) .  方法区:

3.1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

3.2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

4 ) . 大白话解释栈,堆和方法区 : 

4.1 栈存放的大多是索引(对象名,方法名,参数名)等局部变量,在栈内多用来交易的场所,也可以理解为存放的相关特定标识符用以交易

4.2 堆存放的是对象实体等成员实例变量,在堆内多用来存放重量级的东西,可以理解为仓库, 从栈内找索引,调取堆内的对象的 

4.3 方法区内存放的是 方法的主体等类基本信息,常量,静态成员变量,(构造方法,final方法,static静态方法,abstract抽象方法,public ,private,protected 控制方法,native其他语言实现的本地方法, synchronized同步方法 )


 
小结 :  

             1.  非静态前省略this.   静态前省略的是 类名.
        
           2.  非静态方法(有访问权限的方法)可以访问静态方法(全局方法),但静态方法不可以访问非静态

   
二十  一.  面向对象(单例设计模式方式一)

1 ) . 名词解释 :

1.1 设计模式 : 

[1]解释 : --> 指对某种问题行之有效的解决方式(方法),是一种思想,一种解决问题的思考方式 

[2] 目的 : --> 让复杂的事情简单化

[3] 框架 : --> 框架是 多种设计模式的整合优化产生的结晶

[4] 吃饭的设计模式:-->   中国 :  筷子 ;   欧美 :  刀叉 !

1.2 java中23种设计模式之一 : 单例模式

[1] 解释 : --> 解决一个类在 内存中只存在一个对象, 也就是解决唯一性的问题

[2] 思想 : -->   如何保证对象唯一

① 为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象

② 为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象

③ 为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式

[3] 步骤 : -- >  如何用代码实现?

① 将构造函数私有化

② 在类中创建一个本类对象

③ 提供一个方法可以获取到该对象


2 ) . 单例模式代码:

class SingleDemo
{
    public static void main(String[] args)
    {
        //通过类调取实例化对象方法从而实现对象的创建
         Single ss=Single.getInstance();
    }    
   
}



  class Single
{
     //私有的无参构造
    private single(){}
    
    //创建一个私有化静态对象
    private static Single s =new Single();
    
    //创建一个私有化的实例化对象方法
    public static Single getInstance()
    {
        return s;
    }
    
}


3 ) . 获取方法的两种方式 :   

3.1 通过对象的方式调用

3.2 通过类的方式调用  

4 ) . 单例模式验证代码:

class SingleDemo
{
//验证是否对象唯一,采用设值的方式,使用对象1进行设值,然后通过对象2进行调取,看看是否取得是设的值,若是则说明是同一对象
    public static void main(String[] args)
    {
        //通过类调取实例化对象方法从而实现对象的创建
        // Single ss=Single.getInstance();
        
        //通过new的方式创建对象
    //    Single s1 = new Single();
        
    //    Single s2 = new Single();
    
        //通过实例化方法创建对象
        Single s1= Single.getInstance();
    
        Single s2= Single.getInstance();
        
        s1.setNum(23);
        
        System.out.println(s2.getNum());
        
    }    
    
    
}
  class Single
{
    //测试传入值
    private int num;
    
    public void setNum(int num)
    {
        this.num=num;
        
    }
    
    public int getNum()
    {
        return num;
    }
     //私有的无参构造
    private Single(){}
    //Single(){}
    
    //创建一个私有化静态对象
    private static Single s =new Single();
    
    //创建一个私有化的实例化对象方法
    public static Single getInstance()
    {
        return s;
    }
    
    
}



小结 :  

             1.  对于事物该怎么描述还怎么描述,当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可
        
    
 

    二十   二. 面向对象(单例设计模式方式二)


1 ) . 对比代码 : 

  
/*
先初始化对象称为 : 饿汉式--> single类一进内存,就已经创建好了对象
后初始化对象称为 : 懒汉式--> Single类一进内存,需要采用双重判断是否为null后再进行创建对象
*/  
  
  class Single
{
    private static SingleSecond s=new Single();
    private Single(){}
    public static Single getInstance()
    {
        return s;
        
    }
    
    
}
//对象是方法被调用时,才初始化,也叫做对象的延时加载,称为 : 懒汉式
//Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
class SingleSecond
{
     private static Single s = null;
    
     private Single(){}
public static Single getInstance()
{
     if(s==null)
     {
         synchronized(SingleSecon.class)
         {
             if(s==null)
                 s=new Single();
         }
        
     }
     return s;
}
    
}
class SingleDemo
{
    public static void main(String[] args)
    {
    
    System.out.println("Hello World");
    }    
    
    
}


2 ) . 懒汉式与饿汉式的区别 : 

2.1 对象是在方法被调用时才初始化,也叫做对象的延时加载,称为 : 懒汉式

      Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象

2.2 对象在Single类进内存后就已经被创建初始化完毕,称为 : 饿汉式

 

小结 :  

             1.  工作常用饿汉式,因为安全,因为采用单例就是为了获取唯一对象,而懒汉则一开始需要判断是否为空才创建对象; 懒汉式的劣势在于 需要双重判断+锁机制 保证其安全性, 加剧了代码量

  2.因此 ,定义单例,建议使用 饿汉式 (代码简洁版本) 
        
     

  二十    三. 面向对象(继承-概述1,2)

1 ) . 继承主要目录内容

[1] 继承的概述(本篇)

[2] 继承的特点

[3]super关键字

[4] 函数覆盖

[5] 子类的实例化过程

[6] final关键字

2 ) . Demo : 

/*
将学生和工人的共性描述抽取出来,单独进行描述
只要让学生和工人与单独描述的这个类有关系,就可以了

继承:
1.提高了代码的复用性
2.让类与类之间产生关系,有了关系,才有了多态的特性


注意: 千万不要为了获取其他类的功能,简化代码而继承
必须是类与类之间有所属关系才可以继承,所属关系 is a
*/
   class Person
{  
    String name;
    int age;
    
}
class Student extends Person
{
     void study()
     {
         System.out.println("good study");
        
     }
    
}
class Worker extends Person
{
     void work()
     {
          System.out.println("good work");
        
     }
    
}
class Text
{
         public static void main(String[] args)
    {
        
          System.out.println("Hello world");
        
    }
    
}



3 ) .核心记录  :  关于单继承与多继承与多层继承

3.1 java语言中 : java只支持单继承,不支持多继承

[1] 单继承 --> 指(一个子类仅支持继承一个父类)

[2] 多继承--> 指(一个类支持继承多个父类)

[3] 为何不支持多继承--> 因为存在安全隐患 :  当多个父类中定义了相同功能,而功能内容不同,子类都继承后,在调用时会不确定运行哪一个

3.2 java支持多层继承,也就是一个继承体系 -->A继承B ,B继承C,C继承D  ....

[1] 如何使用一个继承体系中的功能呢?

第一步 : 欲使用此体系,先查阅此体系的父类描述  --> 因父类描述是该体系中的共性功能(基础功能)

[2] 在具体调用时,要创建继承体系中最子类的对象,为什么?

第一 ,因为有可能父类不可以创建对象

第二,要创建子类对象可以使用更多的功能,同时父类中的也包含了

一句话总结 : 查阅父类功能,创建子类对象,而后使用功能

 
小结 :  

             1.  类本身就是对象的抽象,抽的是对象的共性
        
           2.  父类-->超类-->基类-->父类的由来是由子类不断地向上抽取而来的

   3 .类与类之间有间接继承关系(指具有个别共性)时,向上抽取出父类;类与类之间有直接继承关系(指具有全部共性)时,直接完成继承

   4 .在继承中,最共性的父类类就是继承体系中最基础的功能



     
 

   







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值