匿名类 接口 final关键字
今天学习了匿名类 接口 finall关键字的相关知识,做一个总结。
匿名类:
1.没有名字的子类对象。
2.匿名类中,必须要包含的是类型中抽象方法的实现。
3.匿名类是一次性的。
几点区别:
1.抽象类里有构造方法,抽象类不能直接创建对象。普通类有构造方法,普通类能创建对象。
2.抽象类能承载抽象方法,普通类不能承载抽象方法。
3.抽象类可以有普通属性,普通类有普通属性。
** 1.方法重写过程不能改变返回值,不能改变方法名,不能改变参数列表,能改变访问控制(可以从小往大改。PRIVATE-PUBLIC,) 理由:为了要维护里氏替换原则的完整性。
public int a;
@Override
public void eat() {
}
};
Animal b = new Animal(){
@Override
public void eat() {
}//常见于回调过程中
抽象类可以有构造方法。 因为构造方法有两个功能1.创建对象2.初始化对象
抽象类不能直接来创建对象。因为抽象方法影响创建对象过程。
接口
接口是用来规定类型当中必须得有的方法的模板。
不拿public ,statict 修饰,默认为抽象方法。
public interface IUSB {
void foo();// 默认为 public abstrict 的抽象方法。
所以接口里没有普通方法,都是抽象方法,或default,static方法。
default void foo(){ //default 告知接口有方法体.
接口没构造方法。 接口不能直接创建对象 。接口没普通方法。
implements (实现)public class Cat extends Animal implements IUSB{
JAVA类范畴单继承,可以多实现 。不同接口类名不能相同。 接口也可继承
final关键字
final代表着最终的一种状态,其意义就是不可变化,final可以修饰属性,方法和类型的
final修饰属性其特征是 代表这个属性是不可改变的(物理地址不可改变)或者说这个对象的引用不可改变。
由于这个值(引用不可改变),所以我们也称呼被final所修饰的变量为常量.
final修饰的常量只能在创建的时候和构造方法中初始化。且只能被赋值一次。
final修饰方法不能被重写。final修饰类型不能被继承。
例:
public class Pet {
public final int age=3;
public class Pet {
public final int age;
public Pet() {
this.age = 3;
}
}
例题:选出正确的方法。
public abstract final void foo() {
System.out.println("final方法");
}//abstract没有方法体
public final void foo() {
System.out.println("final方法");
}//正确
public final abstract void foo(){
System.out.println("final方法");
}
public final abstract void foo();
}