欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java学习笔记15(面向对象八:匿名对象、内部类)

程序员文章站 2022-06-24 09:14:30
匿名对象: 是指创建对象的时候,只有创建对象的语句,却没有把对象地址值赋给某个变量 创建一个普通对象: Person p = new Person(); 创建一个匿名对象: new Person(); 注意: 1.匿名对象只能使用一次 2.匿名对象可以作为参数传递 3.匿名对象可以当作方法的返回值 ......

匿名对象:

是指创建对象的时候,只有创建对象的语句,却没有把对象地址值赋给某个变量

创建一个普通对象:

Person p = new Person();

创建一个匿名对象:

new Person();

注意:

1.匿名对象只能使用一次

2.匿名对象可以作为参数传递

3.匿名对象可以当作方法的返回值

示例:

public class Demo {
    public static Person getPerson(){
        //普通方式
        //Person p = new Person();    
        //return p;
        
        //匿名对象作为方法返回值
        return new Person(); 
    }
    
    public static void method(Person p){}
}

public class Test {
    public static void main(String[] args) {
        //调用getPerson方法,得到一个Person对象
        Person person = Demo.getPerson();
        
        //调用method方法
        Demo.method(person);
        //匿名对象作为方法接收的参数
        Demo.method(new Person());
    }
}

 

 

内部类:

在类的内部定义类

什么时候需要呢?比如,一个汽车,包含发动机,发动机就可以用内部类来描述

内部类的分类:成员内部类,局部内部类

成员内部类的建立和调用示例:

public class Outer {
    private int a = 1;
    //内部类可以使用外部类成员,包括私有
    //外部类无法直接使用内部类变量,必须建立内部类对象
    class Inner{
        public void inner(){
            System.out.println("内部类方法"+a);
        }
    }
}
public class Test {
    public static void main(String[] args) {
        //内部类调用格式:
        Outer.Inner in = new Outer().new Inner();
        in.inner();
    }
}

 

同名变量的调用问题:

public class Outer {
    int i = 1;
    class Inner{
        int  i =2;
        public void inner(){
            int  i = 3;
            System.out.println(i);//3
            System.out.println(this.i);//2
            System.out.println(Outer.this.i);//1
        }
    }
}

 

局部内部类:

把一个类写在了一个方法里面

调用方法相对复杂

示例:

public class Outer {
    public void out(){
        class Inner{
            public void inner(){
                System.out.println("局部内部类方法");
            }
        }
        Inner inner = new Inner();
        inner.inner();
    }
}
public class Test {
    public static void main(String[] args) {
        new Outer().out();
    }
}

 

 

内部类的实际使用:

匿名内部类:

临时定义某一指定类型的子类,定义后立即创建刚刚定义的这个子类对象

示例:

public interface Smoking {
    public abstract void smoking();
}
public class Test {
    public static void main(String[] args) {
        //固定格式
        //实际上创建了接口的实现类,重写方法
        //这里也可以这样写Smoking s = new Smoking() {};
        //然后s.方法调用
        new Smoking() {
            public void smoking() {
                System.out.println("人在吸烟");
            }
        }.smoking();
        //注意这个分号
    }
}