Java学习笔记15(面向对象八:匿名对象、内部类)个人认为写的浅显易懂
Java学习笔记15(面向对象八:匿名对象、内部类)
匿名对象:
是指创建对象的时候,只有创建对象的语句,却没有把对象地址值赋给某个变量
创建一个普通对象:
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();
//注意这个分号
}
}


浙公网安备 33010602011771号