Day05\06\07:面向对象

面向对象

  • 本质:以类的方式组织代码,以对象的组织(封装)数据。

    三大特性:

    • 封装

    • 继承

    • 多态

  • 属性

  • 方法

构造器

  • 一个类即使什么都不写,它也会存在一个方法

  • 使用new关键字,本质是在调用 构造器。用来初始化值

  • 有参构造:一旦定义了有参构造,无参就必须显示定义

//alt+insert 快捷键 定义一个有参构造


构造器。就是类自带的方法,可以在里面初始化类的对象。

  1. 和类名相同

  2. 没有返回值

  3. this. 指向当前类


    简单小洁类与对象

    1. 类与对象

    类是一个模板:抽象、对象是一个具体的实例

    1. 方法

    定义、调用

    1. 对象的引用

    引用类型: 基本类型

    对象是通过引用来操作的:栈--->堆

    1. 属性:字段Field 成员变量

    默认初始化。

    1. 对象的创建和使用

    • 必须使用new关键字创造对象,构造器

      Person kuangshen =new Person();

    • 对象的属性 kuangshen.name

    • 对象的方法 kuangshen.sleep()

    1. 类:

    静态的属性 属性

    动态的行为 方法

    封装

    该露的露,该藏的藏

    高内聚,低耦合。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

    封装(数据的隐藏):

    通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

    属性私有,要想用就get/set方法。

    作用:

    • 提高程序的安全性,保护数据

    • 隐藏代码的实现细节

    • 统一接口

    • 系统可维护增加了

    继承

    父类 子类 派生类。

    类和类之间还有 依赖 组合 聚合等关系

    object类

    祖宗类,所有类都继承这个类

    super

    子类访问父类的途径

    私有的东西无法被继承

    1. super调用父类的构造方法,必须在构造方法的第一个

    2. super必须只能出现在子类的方法或构造方法中

    3. super和this不能同时调用构造方法。

    vs this:

    代表对象不同:

    this:本身调用者这个对象

    super:代表父类对象的应用

    前提:

    this:没有继承也可以使用

    super:只能在继承条件才可以使用

     

    方法重写

    需要有继承关系,子类重写父类的方法!

    1. 方法名必须相同

    2. 参数列表必须相同

    3. 修饰符:范围可以扩大,不能缩小。 public->protected->default->private

    4. 抛出的异常:范围可以被缩小,但不能扩大。

    为什么需要重写

    1. 子类不一定需要父类的功能,或者不一定满足父类的功能。

    Alt+Inesert: override。

    多态

    1. 多态是方法的多态,属性没有多态

    2. 父类和子类,有联系 类型转换异常

    3. 存在条件:继承关系,方法需要重写

    不能重写的方法

    • static 方法,属于类,不属于实例

    • final 无法改变

    • private方法。

    instanceof

    Java的保留关键字。

    作用:测试它左边的对象是否是它右边的类的实例,返回boolean的数据类型。

    static

    隶属于类,类中所有成员共享,只有一个值。

    最先执行static ,只执行一次。

    抽象类 abstract

    1. 不能new这个抽象类,只能靠子类去实现它,约束!

    2. 抽象类中可以写普通的方法

    3. 抽象方法必须在抽象类中

     

    接口 更高级的抽象

    interface

    接口中不能出现字段。只表示一个接口类型和一组方法签名。

     interface Person{
      void run();
      int age();
     }
     class Student implements Person{
     @Override
      public void run(){
     
      }
     @override
      public int age(){
     
      }
     }
    对比abstract classinterface
    继承 只能extends一个class 可以implements多个interface
    字段 可以定义实例字段 不能定义实例字段
    抽象方法 可以定义抽象方法 可以定义抽象方法
    非抽象方法 可以定义非抽象方法 可以定义default方法

    接口继承

    一个interface可以继承另一个interface。相当于扩展了接口的方法。

    defaul方法

default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。

静态字段和静态方法

对于实例字段,每个实例字段有自己的空间,

而静态字段共享空间。

注意:不推荐用实例变量.静态字段去访问静态字段,推荐使用类名.静态字段。

其实实例变量是没有静态字段的,只是在使用实例变量.静态字段时,系统自动转化成类名.静态字段。

调用实例方法必须通过一个实例变量,而调用静态方法则不需要实例变量,通过类名就可以调用。类似于C语言中的函数。

接口的静态字段

 public interface Person {
    public static final int MALE = 1;
    public static final int FEMALE = 2;
 }

interface定义一个静态字段,必须是public static final

所以在定义时,可以省略public static final,系统编译器会自动添加。

作用域

public :可以被所有的访问,但是当字段和方法被访问时,要考虑到class是否能访问

private :无法直接访问,可以通过set get方法访问。 被限定在类的内部,可以被嵌套类访问。

protected: 作用于继承关系。定义为protected的字段和方法可以被子类访问,以及子类的子类。

package: 包作用域:指一个类允许访问同一个包里没有public、private修饰的class,以及没有public、private、protected修饰的字段和方法。

注意:包没有父子关系。

局部变量: 在方法内部定义的变量。

final:用final修饰class可以阻止被继承。

修饰method可以阻止被子类覆写。

修饰field可以阻止被重新赋值。

 

内部类

一个类定义在一个类的内部。

它与普通类有个最大的不同,就是Inner Class的实例不能单独存在,必须依附于一个Outer Class的实例。

classpath和jar包

不要把任何Java核心库添加到classpath中!JVM根本不依赖classpath加载核心库!

 

posted @ 2021-10-11 22:55  027code  阅读(84)  评论(0)    收藏  举报