【Java】Class-类-知识点

一、外部类、内部类、局部内部类

1.类指外部类,最大的类,修饰符有public(表示该类在项目所有类中可以被导入),default(该类只能在同一个package中使用),abstract,final

2.内部类指位于类内部但不包括位于块、构造器、方法内,且有名称的类,修饰符有public,private,protected访问控制符,也可以用static,final关键字修饰,public和private比较简单,一个表示所有可以被所有类访问,一个表示只能被自身访问,protected修饰的成员类可以被同一个包中的类和子类访问。而default修饰的成员类只能被同一个包中的类访问。

3.局部内部类指位于块、构造器、方法内的有名称类,最多只能有final修饰

二、类之间的关系

useres-a: 依赖关系,A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。这种在代码中的体现为:A类方法中的参数包含了B类。

is-a 表示继承:Gadget is-a Widget就表示Gadget 继承 Widget;

has-a 表示从属:Gadget has-a Sprocket就表示Gadget中有Sprocket的引用,Sprocket是Gadget的组成部分;

like-a 表示组合:如果A like-a B,那么B就是A的接口

三、发生多态

Java多态有两种情况:重载和覆写

覆写中,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法;

重载中,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法

四、继承与实现

之间的关系为继承,只能单继承,但可以多层继承

接口之间的关系为实现,既可以单实现,也可以多实现

接口接口之间的关系为继承,既可以单继承,也可以多继承

五、类初始化顺序

  • 父类的静态代码块
  • 子类的静态代码块
  • 父类的普通代码块
  • 父类的构造方法
  • 子类的普通代码块
  • 子类的构造方法

类初始化顺序详细

类加载器详细

五、子类调用

1、子类构造函数调用父类构造函数用super
2、子类重写父类方法后,若想调用父类中被重写的方法,用super
3、未被重写的方法可以直接调用。

子类不可以继承父类的构造方法,只可以调用父类的构造方法。

super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。

六、静态类注意

1.静态内部类才可以声明静态方法
2.静态方法不可以使用非静态变量
3.抽象方法不可以有函数体

七、内部类

(1)把类定义在另一个类的内部,该类就被称为内部类
举例:把类B定义在类A中,类B就被称为内部类。

(2)内部类的访问规则
A:可以直接访问外部类的成员,包括私有
B:外部类要想访问内部类成员,必须创建对象

(3)内部类的分类
A:成员内部类
B:局部内部类
C:匿名内部类

(4)成员内部类访问规则
成员内部类不是静态的:
外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
成员内部类是静态的:
外部类名.内部类名 对象名 = new 外部类名.内部类名();

(5)局部内部类
A:局部内部类访问局部变量必须加final修饰。
B:为什么呢?
因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。
所以,堆内存还是用该变量,而改变量已经没有了。
为了让该值还存在,就加final修饰。
通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。

(6)匿名内部类(掌握)
A:是局部内部类的简化形式
B:前提
存在一个类或者接口
C:格式:
new 类名或者接口名() {
重写方法;
}
D:本质:
其实是继承该类或者实现接口的子类匿名对象

发布了130 篇原创文章 · 获赞 8 · 访问量 2814

猜你喜欢

转载自blog.csdn.net/ange2000561/article/details/105099849