几个关键字(final/static)
final:可以用来修饰类,类的成员,以及局部变量
注意:final修饰的类不能被继承,但可以继承其他类,俗称“太监类”?
final修饰的方法不可以被重写(覆盖),如果父类中没有被final修饰方法,子类重写之后可以补充final;
final修饰的变量其实是常量,不能再次赋值。可以再构造方法中给final赋值,只要在创建对象前赋值,还是可以的。
final Fu fu = new Fu();//内存地址不变
class Test{
final int n;
public Test(int n){
this.n = n
}
}
static: 静态修饰符,共享数据,不归某对象特有,类似一群孩子都在某所学校(共享的数据),但是每个孩子名字都不一样(对象特有数据),内存中,静态是优于非静态方式的存在~
注意:被static修饰的成员可以直接使用类名直接访问(类名.静态成员变量名称|类名.静态成员方法名(参数列表))
不能使用this/super
静态方法只能调用静态成员变量,
TIP:定义静态常量,开发通过格式 public static final 数据类型 变量名 = 值;变量名全部大写~~对于接口,也可以接口名加静态变量名
interface jiekou {
public static final int ZMN = 99;
}
jiekou.ZMN;
匿名对象
Person a = new Animal(); //实名对象
new Animal();//匿名对象
需要注意的:匿名对象实名的话,只能使用一次;
匿名对象可以当作方法接收的参数和方法的返回值;
其它:内部类(成员内部类||局部内部类||)
顾名思义,所在位置不同;(代码转)
public class Outer {
int i = 1;
class Inner {
int i = 2;
public void inner(){
int i = 3;
System.out.println(Outer.this.i);
}
}
}
定义类
class Party {//外部类,聚会
public void puffBall(){// 吹气球方法
class Ball {// 内部类,气球
public void puff(){
System.out.println("气球膨胀了");
}
}
//创建内部类对象,调用puff方法
new Ball().puff();
}
}
访问内部类
public static void main(String[] args) {
//创建外部类对象
Party p = new Party();
//调用外部类中的puffBall方法
p.puffBall();
}
匿名内部类(代码转)
public interface Smoking {
public abstract void smoking();
}
/*
* 实现类,实现接口 重写接口抽象方法,创建实现类对象
* class XXX implements Smoking{
* public void smoking(){
*
* }
* }
* XXX x = new XXX();
* x.smoking();
* Smoking s = new XXX();
* s.smoking();
*
* 匿名内部类,简化问题: 定义实现类,重写方法,建立实现类对象,合为一步完成
*/
测试类:
public class Test {
public static void main(String[] args) {
//使用匿名内部类
/*
* 定义实现类,重写方法,创建实现类对象,一步搞定
* 格式:
* new 接口或者父类(){
* 重写抽象方法
* };
* 从 new开始,到分号结束
* 创建了接口的实现类的对象
*/
new Smoking(){
public void smoking(){
System.out.println("人在吸烟");
}
}.smoking();
}
}
protected调用不同包的子类,必须在子类写。
代码块
构造代码块和静态代码块,均定义在类中方法之外。
使用格式{} static{} 静态代码块优先执行,但是只执行一次,之后执行构造代码块,最后执行构造方法
abstract 不能与private/static/final同时使用