第八章:面向对象的三大特征(封装、继承、多态)

一、封装

1.目前的程序无法保证数据的正确性,容易造成业务数据错误

2.private:私有的,被private修饰的内容只能在本类中访问

3.为私有化的属性提供公开的get和set方法:

(1)get 方法,获取私有化属性的值:

        public 返回值类型 get属性名(){

                return 属性名;

        }

        注意:返回值类型取决于获取属性类型

                方法名:get+属性名首字母大写

(2)set方法,为私有化属性赋值:

        public void set属性名 ( 数据类型 变量名){
              this.属性名 = 变量名
         }
  注意: () 中的数据类型取决于属性类型
             方法名: set+ 属性名首字母大写

二、继承

碳素笔        是一种        笔

水杯           是一种        容器

狗               是一种        动物

A                   is-a           B

如果A is a B关系城里,A和B之间具有继承关系

A-子类        继承        B-父类

                 extends

1.理解:

(1)继承体现的是类之间的一种“is-a”关系。

        A      is  a    B
      子类              父类
      子类   继承   父类
             extends

(2)语法:

        class 子类类名 extends 父类类名{ }

(3)通过继承关系,子类型可以直接使用父类中定义的属性和方法

2.继承体现了程序的重复性和可扩展性

3.方法的覆盖【也被称为方法的重写-override】

(1)方法的覆盖:子类中定义和父类相同的方法

(2)方法的覆盖要求

a.子类的方法名、形参列表、返回值类型必须和父类一致

b.子类的访问修饰符,和父类相同或比父类更宽

(3)如果子类覆盖了父类中的方法,则优先使用覆盖后的

(4)注意:如果子类定义了和父类方法名、形参列表相同,但返回值类型不同的方法,则编译报错

(5)如果子类定义了与父类方法名相同、形参列表相同的方法则编译通过,运行也ok,这构成了方法的重载

4.Java中继承特点

(1)一个父类可以有多个直接的子类

    class Animal{}
    class Dog extends Animal{}
    class Cat extends Animal{}
(2) 一个子类只能有一个直接的父类,但是可以有多个间接的父类( 多级继承 ) java 中的类之间是单继承

5. java中的访问修饰符:

(1)访问修饰符代表一种访问权限

(2)Java中的4个访问修饰符

        private 私有的

        default 默认的

        protected 受保护的

        public 公开的

(3)访问修饰符的访问权限

                本类        同包        非同包的子类        其他

private        ok

default        ok        ok

protected    ok        ok                ok

public         ok        ok                ok                        ok

(4)访问修饰符内容的继承性

        private修饰的属性和方法,不能被继承

        default修饰的属性和方法,同包子类允许进行

6.super的应用

(1)第一种用法:super.

        a. super.引用子类中的方法,代表访问父类中属性或是成员方法

        b. super.属性名

            super.成员方法名(实参);

(2)第二种用法:super()

       a. 在创建子类对象是,jvm默认创建一个父类对象,而且默认使用父类中无参的构造对象来完成父类对象的创建

        b.super()/super(实参):应用在子类的构造方法的第一行有效语句中,代表创建子类时,告知jvm完成父类对象创建时采用了哪一个构造方法完成对象的创建

      c.如果子类的构造方法第一行没有指定super()/super(实参),则默认添加super() 

三、多态

1.理解

(1)多态:父类型的引用存储不同子类型的对象

                父类类名 引用名=new 子类类名();

                       引用                        对象

                     父类型                      子类型

(2)使用父类型的引用调用属性或是方法,只能调用父类中定义的属性和方法

(3)如果子类覆盖率父类中方法,则优先使用子类覆盖后的方法

2.引用之间的转换

(1)父类型的引用赋值给子类型的引用,需要强制类型转换

        大类型        小类型

        a.子类类名 引用名=(子类类名)父类型的引用名;

        b. 强制类型转换的结果:    

           i. 实际存储的对象类型和要转换类型一 致,编译+运行通过      

           ii. 实际存储的对象类型和要转换的类型 不一致,编译通过,运行报错,错误信息为: java.lang.ClassCastException(类型转换异 常)    

   (2) 子类型的引用赋值给父类型的引用,无需强 转,直接赋值,体现多态

   (3) 没有继承关系双方,不允许相互赋值,强制类型转换也不允许

3. instanceof避免类型转换异常:

(1) 语法:引用名 instanceof 类名

(2) 执行:判断引用中存储的实际对象类型是否兼容于后面的类型(是否为后面类型的一种),兼容true,不兼容-false

(3) 作用:可以在程序设计中避免类型转换异常

直接使用案例中的 Animal Dog Cat 类即可,
main 函数中完成以下功能:
public static void main(String[]arsg){
  Animal a = null;
  /*
  利用 Scanner 输入一个整数 n n 是偶数则存储Dog,
  否则存储 Cat
  */
   
  /*
  判断:如果 a 中存储的是 Cat ,打印输出" 我是猫 "
      否则打印输出 " 我不是猫 "   */
   
}

4.多态的应用:

(1)多态应用在形式参数上:本类型+所有的子类型对象、引用都可以作为实际参数进行传递

  (2) 多态应用在返回值上:本类型 + 所有子类型的对象、引用都可以作为返回值进行返回

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值