匿名内部类基本语法与使用

匿名内部类:是局部内部类一种最简形式;
匿名内部类的本质:本质上一个对象,是实现了该接口,或继承了该抽象类的子类对象。

  1. 下面先来看普通的创建对象,再调用Anonymity类的成员方法;在抽象类或者不能创建其对象,就可以通过创建匿名内部类调用。
public class Testnull {
    public static void main(String[] args) {
        new Anonymity(){                //可以通过创建对象,直接调用成员方法;
            @Override
            public void show() {
                super.show();
            }
        }.show();
        System.out.println("--------------------------------");
        Anonymity anonymity=new Anonymity(){//可以创建对象,再用本类引用接收;
            @Override
            public void show() {
                super.show();
            }
        };
        anonymity.show();
    }
}
class Anonymity{
    int num=333;
    public void show(){
        System.out.println("这是一个show方法!");
    }

}

  1. 下面来看抽象类怎么在主函数中创建对象,即可以通过匿名内部类的方法实现:
public class Test {
    public static void main(String[] args) {
        new Demo(){//可以通过创建匿名内部类的方式,创建抽象类的对象,并重写其抽象方法;
            @Override
            public void show() {
                System.out.println("这是个抽象show方法。");
            }

            @Override
            public void show2() {
                System.out.println("这是个抽象show2方法。");
            }
        }.show();//但是这样创建出来的对象,虽然能够重写抽象类中的所有的抽象方法,但是只能调用其中一个抽象方法;
        
        System.out.println("--------------------------------------");
        
       Demo demo= new Demo(){       //  利用多态的形式,将抽象类的引用地址指向创建出来的子类新对象;

            @Override
            public void show() {
                System.out.println("这是个抽象show方法");
            }

            @Override
            public void show2() {
                System.out.println("这是个抽象show2方法");
            }
        };
       demo.show();         //通过抽象父类引用,就可以调用重写过后的方法了。
       demo.show2();

    }
}
abstract  class Demo{
    public  abstract  void  show();//抽象方法;
    public  abstract  void show2();//抽象方法;
    public  void show3(){           //非抽象方法
        System.out.println("这是个show3方法。");
    }
}
  1. 同样接口类的实现也可以利用同样的方式实现对象的创建;
public class Test {
    public static void main(String[] args) {
       Mydemo mydemo= new Mydemo(){//利用多态的形式,接收创建出来的接口对象
            @Override
            public void test1() {
                System.out.println("重写过后的test1方法");
            }

            @Override
            public void test2() {
                System.out.println("重写过后的test2方法");
            }
        };
        
        
    }
    
}
interface Mydemo{//接口类中不允许存在非抽象方法;
    public abstract void test1();
    public  abstract  void test2();
    public default void test3(){
        System.out.println("这是一个test3方法");//可以通过在方法声明中加上关键字default,创建有方法体的方法
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值