一.final:用途:不希望类被继承,父类某个方法被子类覆盖,类的某个属性值被修改,某个局部变量被修改。final修饰的属性叫做常量,当不为静态时,可在定义时,构造器中,代码块中赋值,如果是静态的则不能在构造器中赋值。创建对象时只要new,类加载只要使用了类就行。父类有final方法,虽然不能被重写,但能进行调用。final和static同时使用,不会导致类被加载
二.抽象类:当父类的某些方法不能确定时,用abstract关键字修饰该方法,抽象类不能被实例化,abstract只能修饰类和方法,不能修饰属性和其他的,抽象方法不能有主体即{};如果一个类继承了抽象类,则必须实现抽象类的所有抽象方法,除非自己也声名为abstract类。抽象类可用于模板设计模式,子类继承可直接使用该方法,写出两个子类的公共部分,方法内容由子类自己使用,抽象类关键字不能与final,static,private等关键字一起用,因为抽象类本质是用于继承,这些关键字限制继承
三.接口:就是给出一些没有实现的方法,封装到一起,当使用时,就将这些方法写出来,如果一个类要implements实现接口,需要将该接口的抽象方法都实现,jdk8以后接口可以有方法体,比如静态方法,或者加关键字default。接口不能被实例化,接口的所有方法是public方法,普通类实现接口就要把接口的所有方法都实现,抽象类不用.。一个类可以实现多个接口,接口中的属性只能是public static final的,静态属性可以直接通过类名访问,非静态不可以,接口可以继承接口。继承的多态:向上转型:父类的引用指向子类的对象,可以调用父类的所有成员,不能调用子类的特有成员。向下转型:子类类型 引用名 = (子类类型) 父类引用;可以调用子类的所有成员,接口也可以实现向下上转型,实现转型,需要有继承关系或者接口关系,访问父类属性用super关键字.。
四.类的五大成员:属性,方法,构造器,代码块,内部成员
内部类:局部内部类定义在外部类的局部位置,通产在方法中,可以访问外部类的所有成员,包含私有的,局部内部类不能添加访问修饰符,但可用final修饰。作用域:只能在他的方法或代码块中

外部其他类不可以访问内部类
五.匿名内部类:本质是内部类,无名字,定义在外部内的局部位置

用途之一:实现接口里的方法需要创建一个类去继承,然后再实现方法,匿名内部类可以直接实现该方法创建匿名类,该类创建一次就消失了,可以访问外部类的所有成员,外部其他类不能访问匿名内部类
public class AnonymousInnerClass {
public static void main(String[] args) {
Outer04 outer04 = new Outer04();
outer04.method();
}
}
class Outer04 {
private int n1 = 10;//属性
public void method() {
//基于接口的匿名内部类
//想使用IA接口,并且创建对象,先写一个类实现该接口,并创建对象
//可以使用匿名类来简化开发
//匿名内部类只能使用一次,但对象可以多次调用
/*IA tiger1 = new Tiger();
tiger.cry();*/
//基于接口的内部类
IA tiger = new IA() {
@Override
public void cry() {
System.out.println("老虎叫唤");
}
};
tiger.cry();
//演示基于类的匿名内部类
Father father = new Father("jake"){
//相当于class outer04$2 extends Father
@Override
public void test() {
System.out.println("匿名类重写了test方法");
}
};
System.out.println("father对象的运行类型="+father.getClass());
father.test();
//基于抽象类的匿名内部类
Animal animal = new Animal(){
public void eat(){
System.out.println("小狗吃骨头...");
}
};
animal.eat();
}
}
interface IA {
public void cry();
}
/*class Tiger implements IA{
@Override
public void cry() {
System.out.println("老虎在咆哮");
}
}
class Dog implements IA{
@Override
public void cry() {
System.out.println("小狗汪汪....");
}
}*/
class Father {
public Father(String name) {
//构造器
}
public void test() {
}
}
abstract class Animal{
public void eat(){};
}
匿名类的使用案例:

`
成员内部类:没有在方法中也没在代码块中,可以访问外部类的所有成员,包括私有成员可以添加任意的访问修饰符
在外部类的成员方法中创建内部类对象,再调用方法就可访问内部类;外部其他类访问内部类:
本文详细介绍了Java编程语言中的final关键字用于防止继承和修改,抽象类作为模板设计模式的基础,接口提供未实现的方法以及类的五大成员。还特别讨论了匿名内部类的使用,如何简化接口实现和继承,并展示了相关示例。
1794





