java3

本文详细介绍了Java编程语言中的final关键字用于防止继承和修改,抽象类作为模板设计模式的基础,接口提供未实现的方法以及类的五大成员。还特别讨论了匿名内部类的使用,如何简化接口实现和继承,并展示了相关示例。
摘要由CSDN通过智能技术生成

一.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(){};
}

匿名类的使用案例:

 `

成员内部类:没有在方法中也没在代码块中,可以访问外部类的所有成员,包括私有成员可以添加任意的访问修饰符

在外部类的成员方法中创建内部类对象,再调用方法就可访问内部类;外部其他类访问内部类:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值