Java的三巨头面向对象先见面聊聊

继承、封装、多态

  • 继承
    • 类的继承
      • super
      • @Override
    • 接口继承
    • Object
    • 数组中存入对象
  • 封装
    • 封装的理解和好处
    • 封装的实现步骤
    • 封装与构造器
  • 多态
    • 多态基本写法
    • 什么是多态
    • 方法体现多态
    • 对象的多态
    • 多态的向上转型
    • 多态的向下转型
    • 多态注意事项和细节讨论
    • 动态绑定机制

继承

类的继承

通过extends这个关键字实现类的继承,意思是子类继承父类,父类有什么,子类就有什么,而且是单继承的,一个父类可以有多个子类,但是一个子类只能有一个父类

例如 Son extends Father 说明 Son是子类,继承了Father 父类的所有

super

java关键字,意思为在子类中去调用父类的方法,属性

@Override

Override:重写

@Override:java中的伪代码,本质是注解,但在类的继承里,表示验证下面的方法是不是重写父类方法的关键,可以通过@Override来验证判断

接口继承

也是通过extends这个关键字实现接口的继承的,意味是实现类不仅要实现子接口中的定义的方法,同时还要实现父接口中定义的方法

Object

Object: 在Java中所有类默认继承了Object 类,Object 类是所有类的父类 是最根本的父类

单词意思为对象

是Java中范围最广的一个类

数组中存入对象

存入Object类型的数组中

方法一:

Object [] a={
     对象名,对象名}

方法二:

类名[] a={
     对象名,对象名}

封装

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制(比如说是去访问给私有变量赋值、读取的方法)。

封装的理解和好处

1)隐藏实现细节:方法(链接数据库)<–调用(传入参数…)

2)可以对数据进行验证,保证安全合理

封装的实现步骤

1)将属性进行私有化private [不能直接修改属性]

2)提供一个公共(public)的set方法,用于对属性判断并赋值

public void set Xxx(类型 参数名){

​ //加入数据验证的业务逻辑

属性=参数名;

}

3)提供一个公共(public)的get方法,用于获取属性的值

public 数据类型 getXxx(){ // 权限判断

​ return xx ;

}

封装与构造器

如果将成员变量在构造器中直接赋值,将把变量的验证机制破解,所以可以直接在构造器中将变量的set方法放到构造器里面,这样的话验证机制不会被破解。

多态

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

多态基本写法

学习多态基础语法之前,我们需要普及两个概念:

第一个:向上转型

子类–>父类(自动类型转换)

例如: Animal a=new Cat();

第二个:向下转型:

父类——>子类(强制类型转换,需要加强类型转换符)

例如: Cat c =(Cat)a;

注意:

Java中允许向上转型,也允许向下转型

(重点)无论是向上转型,还是向下转型,两个类型之间必须有继承关系,没有继承关系编译器会报错。

什么是多态

多种形态,多种状态、编译和运行有两个不同的状态。

编译期叫做静态绑定。

运行期叫做动态绑定。

例如:

Animal a=new Cat();//编译类型的则是Animal类 , 运行类型是Cat类

方法体现多态

我们传入不同的参数,就会调用不同的相应的方法,就能够体现出多态

对象的多态

1)一个对象的编译类型和运行类型可以不一致

2)编译类型再定义对象时,就确定了,不能改变

3)运行类型是可以变化的

4)编译类型看定义时=号的左边,运行类型看=号的右边

Animal  animal = new Dog(); //【animal编译类型时Animal,运行类型Dog】
animal = new Cat ();//【animal的运行类型变成了Cat,编译类型仍然是Animal】

多态的前提是:两个对象(类)存在继承关系

多态的向上转型

1)本质:父类的引用指向了子类的对象

2)语法:父类类型 引用名 = new 子类类型();

3)特点:编译类型看左边,运行类型看右边。

​ 可以调用父类中的所有成员(需遵守访问权限)

​ 不能调用子类中特有成员;

​ 最终运行效果看子类(运行类型)的具体实现,即调用方法时,按照从子类(运行类型)开始找方法,然后调用。

structure:结构

多态的向下转型

1)语法:子类类型 引用名 = (子类类型) 父类引用;

2)只能强换父类的引用,不能强转父类的对象

3)要求父类的引用必须指向的时当前目标类型的对象

4)可以调用子类类型中所有的成员

多态注意事项和细节讨论

属性没有重写之说!属性的值看编译类型

instanceOf 比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型

动态绑定机制

Java的动态绑定机制

1)当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定

2)当调用对象属性时,没有动态绑定机制,哪里声明,那里使用

你可能感兴趣的:(java,多态,封装,继承)