三、OO三大特性

三、OO三大特性

封装、继承、多态

  • 封装:类的概念,把属性和方法包装到一个程序单元中,进行了一定信息隐藏(setter/getter)
  • 继承:类的父子关系,子类可以继承父类的属性和方法,也可以重写扩展(父类私有无法继承)
    • 数量:只能单继承
    • 好处:复用性、节省代码
    • 注意:继承于抽象类的子类中,必须重写(实现)抽象方法
  • 多态:不同类对象对同一消息做出的反应
    • 对外一种表现形式 对内多种具体实现
    • 重写和重载也算多态(重写:运行期;重载:编译期)
    • 通常通过抽象类、接口实现多态

1、封装(类)

1、访问修饰符

  1. public
    1. 都可访问
  2. private
    1. 只有该类内部可访问
  3. protected
    1. 该类及其子类可访问,同一个包下的类也可访问
  4. 默认
    1. 同一个包内的类可访问
位置publicprotected默认private
同一个类YYYY
同一个包下的类YYYN
不同包子类YYNN
不同包无关类YNNN

2、this

这里只提一个小点:构造方法调 其他构造必须放第一行

class A {
   public A(){}
   public A(Object o){
       this(); // 必须放第一行!!!
       // ...
   }
}

2、抽象类 abstract

  • 抽象:把多个事务的共性抽取出来

    • 比如十二生肖的共性就是它们都是动物,宏观概念上动物有的特性十二生肖都有
  • 抽象类:Java可以定义没有方法体的方法,该方法由其子类继承并具体实现,该方法我们称之为抽象方法,含有抽象方法的类被称为抽象类

    • 属性:没要求

    • 方法:静态、非静态都可以,可以有也可以没有抽象方法(修饰符:abstract,没有方法体)

    • 构造方法:有(但是不能实例化,为子类实例化)

    • 继承:单继承(必须重写抽象方法)

    • 注意:有抽象方法的类必须是抽象类,抽象类不一定有抽象方法

    • 栗子

      • // 抽象类必须由abstract修饰
        abstract class 抽象类{
            public int num;
        
            public 抽象类() {
                // 虽然我有构造器,但是依然不能实例化
            }
        
            // 抽象方法必须由abstract修饰
            public abstract int getNumAddOne();
        }
        

3、接口 interface

  • 概念:定义了一种规范

  • 好处:

    • 多实现(implements,一个类虽然只能继承一个父类,但是可以实现多个父接口)

      • interface A{}
        interface B{}
        interface C{}
        class E{}
        class F extends E implements A,B,C{}
        
    • 多继承(extends,一个接口可以继承多个接口,没错,多继承!)

      • interface A{}
        interface B{}
        interface C extends A,B{ }
        
  • 注意:实现接口,必须重写抽象方法( jdk1.8接口可定义静态方法 )

  • 作用:解耦(降低程序间的依赖关系)高内聚低耦合

  • 特点

    • 属性:只能定义公开静态常量(public static final;不写的话默认也是这个)
    • 方法:公开抽象方法(public abstract;不写的话默认也是这个)、静态方法(jdk1.8+)
  • 栗子

    • public interface 接口 {
          // 接口属性只能用 public static final 修饰
          public static final double LENGTH = 2;
          // 默认也是 public static final
          double WIDTH = 0.1;
          // 接口方法全是抽象方法
          public abstract void charge();
          // 默认也是 public abstract
          void read();
      }
      

4、抽象类和接口

接口抽象类
继承多继承,多实现单继承
属性常量(public static final)都可以
方法抽象(public abstract)/静态(jdk1.8)都可以(有抽象方法的类一定是抽象类)
构造有(不能实例化,为子类实例化)
关系like-ais-a
思想不考虑事物的相关性
只是一种规范
用于一组相关的事物
总不能让狗继承抽象花吧
二者完全没有相关性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯纯的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值