Java 面向对象

Java 面向对象

规范

  • 一个代码文件可以有多个类, 但是只能有一个类是 public 修饰的.

构造

  • 由虚拟机调用构造方法
  • 系统默认创建无参构造, 自定义有参或无参的构造方法后, 虚拟机不会创建无参构造.

this

  • 对象的函数入栈时会有 this

  • this 由虚拟机调用

进阶

static

  • 静态变量 内存图

  • 静态方法内存

总结

继承

  • java 只支持单继承

属性继承关系

  • 默认
  • private
    • 私有变量可以继承,但是不能使用

方法继承关系

  • private static final 函数会被添加到虚方法表
  • 虚方法表会层层向下给到子类
重写

构造方法

this super

多态

弊端

instanceof

final

  • 修饰变量时必须要赋值且只能赋值一次
  • 修饰基本数据类型, 记录的值不能改变
  • 修饰引用数据类型, 记录的地址值不能改变, 内部的属性值可以改变.

权限修饰符

  • 实际开发中, 一般使用 private public, 一般成员变量私有, 成员函数共有
class test{
    private int id;

    public test(int id) {
        this.id = id;
    }
    public test(test test){
        id = test.id;
    }
} 构造方法为什么可以方位 私有变量

在 Java 中,**构造方法可以访问同类对象的私有变量**,这是因为 **Java 的访问控制是基于类(class)级别的,而不是基于对象(instance)级别的**。也就是说,**同一个类的不同对象之间可以互相访问私有成员**,包括私有字段(`private`)、私有方法等。

代码块

  • 构造代码块
  • 静态代码块

抽象类和抽象方法

  • 抽象类不能实例化, 但是可以有构造方法; 因为子类在初始化时父类的私有变量初始化要使用该抽象类的构造方法.

接口

  • 接口是对行为的抽象

  • 接口中可以有方法体, 在接口升级中可以防止报错; 接口中增加10个新函数, 添加 default 防止继承接口的类报错

接口多态

接口适配器模式

内部类

成员内部类

获取内部类对象
Outer.Inner oi = new Outer().new Inner();
System.out.println(oi.name);
Outer outer = new Outer();
Outer.Inner instance = outer.getInstance();
System.out.println(instance);
//OOP.ineerClass.Outer$Inner@4e50df2e
  • 如果内部类不是 private 修饰的可以使用第一种, 否则使用第二种.

  • 内部类中使用 Outer.this.name 访问外部类的成员变量

静态内部类

局部内部类

匿名内部类

  • 匿名内部类的名字是 外部类$1.class, 外部类$2.class
demo
public class main {
    public static void main(String[] args) {
        method(
                new Swim(){
                    @Override
                    public void swim() {
                        System.out.println("花式游泳");
                    }
                }
        );
    }
    public static void method(Swim swim){
        swim.swim();
    }
}
  • Swim 是一个接口, 当需要一个有 swim() 方法的对象时可以使用匿名内部类