测试 成员内部类、局部内部类、匿名内部类

测试 成员内部类、局部内部类、匿名内部类,第1张

测试 成员内部类、局部内部类、匿名内部类 TestInner1 ---内部类入门案例 TestInner2 ---成员内部类被private修饰后 TestInner3 ---成员内部类被Static修饰后的效果 TestInner4 ---局部内部类 TestInner2 ---匿名内部类
package com.wuya.innerclass;
//测试内部类 入门案例
public class TestInner1 {
    public static void main(String[] args) {
        //3.TODO 创建内部类对象,使用内部类的资源
        Outer.Inner oi = new Outer().new Inner();
        oi.miss();
        System.out.println(oi.tel);
        //3.1 外部类使用与之前一样,直接创建外部类对象
        new Outer().find();
    }
}
//1.创建外部类
class Outer{
    //1.1定义外部类属性
    String name;
    private int age;
    //1.2定义外部类成员方法
    public void find(){
        System.out.println("find()...@外部类");
        //5.TODO 外部类可以使用内部类的资源吗?--必须先创建内部类对象,才可访问
        Inner in = new Inner();
        System.out.println(in.addr+in.tel);
        in.miss();
    }

    //2.创建成员内部类(成员内部类的位置:在类里方法外;
    //                局部内部类:方法里)---内部类分两种
    class Inner{
        private String addr;
        long tel;
        public void miss(){
            System.out.println("miss()...@内部类");
            //4.TODO 内部类可以使用外部的资源吗?--可以使用,包括私有资源
            System.out.println(name+age);
//            find();否则方法间相互调用,成死循环了
        }
    }
}
package com.wuya.innerclass;
//测试 成员内部类被private修饰的现象
public class TestInner2 {
    public static void main(String[] args) {
//        new Outer2().new Inner2();//这行代码一些就报错
        //曲线救国,可以先创建外部类对象,调用drink()
        //创建外部类对象间接访问私有内部类中的资源
        new Outer2().drink();
    }
}
class Outer2{
    public void drink(){
        new Inner2().eat();
    }
    //测试得知:通过private修饰的内部类,私有化,无法被外界直接访问
    private class Inner2{
        public void eat(){
            System.out.println("eat()...@内部类");
        }
    }
}
package com.wuya.innerclass;
//测试 成员内部类被static修饰后的效果
public class TestInner3 {
    public static void main(String[] args) {
//        new Outer3().new Inner3();//报错
        //TODO 通过外部类的类名来创建内部类对象
        Outer3.Inner3 in3 = new Outer3.Inner3();
        in3.sing();
        new Outer3.Inner3().sing();
        //todo 访问内部类的静态资源---链式加载
        Outer3.Inner3.sing2();
    }
}
class Outer3{
    String addr;
    //成员内部类被static修饰---并不常用---浪费内存
    //测试得知:被static修饰后的成员内部类不能被外部类直接访问
    static class Inner3{
        char sex;
        public void sing(){
            System.out.println("sing()...");
        }
        static public void sing2(){
            System.out.println("sing2()...");
        }
    }
}


package com.wuya.innerclass;
//测试 局部内部类
public class TestInner4 {
    public static void main(String[] args) {
        
        new Outer4().show();
    }
}
class Outer4{
    public void show(){
        //局部内部类的位置:方法里
        class Inner4{
            String addr;
            public void play(){
                System.out.println("局部内部类的方法play()...");
            }
        }
        
        //答:【在方法内】创建局部内部类的对象
        Inner4 in = new Inner4();
        in.addr = "上海";
        System.out.println(in.addr);
        in.play();
    }
}

package com.wuya.innerclass;
//测试 匿名内部类
//TODO 理解:匿名内部类没有名字,通常结合匿名对象一起使用

public class TestInner5 {
    public static void main(String[] args) {
        //2.new Inner1()是匿名对象;两个重写的方法及外层大括号属于 匿名内部类
        
        new Inner1() { //接口的实现类
            @Override
            public void sing() {
                System.out.println("sing()...");
            }

            @Override
            public void dance() {
                System.out.println("dance()...");
            }
        }.dance();//触发指定的重写后的方法
        

        //4.匿名对象new Inner2()
        new Inner2() {
            @Override
            public void say() {
                System.out.println("say()...");
            }
        }.say();

        //6.创建普通类的匿名对象
        
        new Inner3().learn();
    }
}
//1.创建接口 Inner1
interface Inner1{
    void sing();
    void dance();
}
//3.创建抽象类 Inner2
abstract class Inner2{
    abstract public void say();
    public void drink(){
        System.out.println("drink()...");
    }
}
//5.创建普通类 Inner3
class Inner3{
    public void sleep(){
        System.out.println("sleep()...");
    }
    public void learn(){
        System.out.println("learn()...");
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5691092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存