今天就是面向对象的结尾了,最后讲了一些前面没有说过的一些内容和细节。下周就开始api了
匿名对象
匿名对象就是没有命名的一种调用方法,即只new了一个实体,并没有把这个实体的地址给到栈区。
class Demo01{
public static void main(String[] args){
new A();
}
}
class A{
}
匿名对象的使用范围:
- 快速访问 (测试)
- 传参
内部类
内部类分为-
- 类中方法外 (成员内部类)
- 调用: 外部类.内部类 变量名 = new 外部类().new 内部类();
- 方法中(局部内部类)
- 没有办法直接去调用,只能在方法中定义一个类,然后让别人去使用
内部类还可以是匿名内部类,快速的实例化接口,或者抽象类
new 接口/抽象类(){
重写父类的方法
};
new 接口/抽象类(){
重写父类的方法
}.方法名();
代码块
代码块就是用{}来包括在其中的,分三种
- 构造代码块(类中,方法外,在调用构造方法的时候先调用构造代码块)
- 局部代码块(方法中,)
- 静态代码块(在前面加上static,在类被加载的时候就被加载,且只加载一次)
class Demo7
{
public static void main(String[] args)
{
B b = new B();
}
}
class A
{
static{
System.out.println("我是父类静态代码块");
}
{
System.out.println("我是父类构造代码块");
}
public A(){
System.out.println("我是父类空参构造");
}
}
class B extends A
{
static{
System.out.println("我是子类静态代码块");
}
{
System.out.println("我是子类构造代码块");
}
public B(){ // 父类
super();
System.out.println("我是子类空参构造");
}
}
这个执行完就知道这些东西是如何进行的了
包
什么是包?
- 包是对于class文件进行管理的一种工具
如何命名
- 公司域名倒写
要先在代码的前面写包的位置
package com.edu.zut.A
四种权限修饰符
作用场景 | public | protected | 空白 | private |
---|---|---|---|---|
同一个类 | Y | Y | Y | Y |
同一个包(子类/无关类) | Y | Y | Y | N |
不同包(子类) | Y | Y | N | N |
不同包无关类 | Y | N | N | N |