内部类小记

来源:互联网 发布:tvpt50炮数据 编辑:程序博客网 时间:2024/06/09 20:04
定义           :            在Java中,允许在一个类的内部定义类,这样的类称作内部类也叫做嵌套类,这个内部类所在的类称作外部类。


内部类的创建   :


                             1 外部类名.内部类名 变量名=new外部类名().new 内部类名();


                             2 在外部类的内部可以直接使用inner s=new inner();(因为外部类知道inner(内部类名)是哪个类,所以可以生成对象。)
内部类的共性   :
                             1 内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。(以$开头的标识符在Java中表示内部类名,是合法标识符)


                             2 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,包括外部类private修饰的成员变量。


匿名内部类的优点   :        1   可以使命名变得简洁
    2   使代码更加紧凑,简洁,封装性比内部类更优
    3    一个类用于继承其他类或是实现接口,无需增加其他的方法,只是对继承方法实现覆盖




匿名内部类的缺点   :        可读性差 


使用匿名内部类的前提:       必须继承父类或实现一个接口


匿名内部类特点 :            匿名内部类一定是跟在new的后面,用其隐含实现一个接口或一个类,没有类名,根据多态,我们使用其父类名。因为匿名内部类属于局部类,
                             所以局部类的所有限制对其生效。匿名内部类是唯一一种无构造方法的类。


匿名内部类注意点:           1 不能有构造方法
                             2 不能定义任何静态成员、方法或类
                             3 不能是public,protected,private,static
                             4 只能创建匿名内部类的一个实例。
   




下面我们来个实例   
package com.yc.beab;


public interface Product {//定义产品接口  接口中有未实现的方法 getPrice(),getName()
public double getPrice();
public String getName();
}


package com.yc.beab;


public class TestAnonymous {
public void test(Product p){
System.out.println("购买了一个"+p.getName()+",花去"+p.getPrice());
}
public static void main(String[] args){
TestAnonymous ta=new TestAnonymous();
//调用test方法,需要传入一个Product参数,此处传入其匿名,实现类的实例
ta.test(new Product(){   //此处只例举了第二种 内部类的创建    
public double getPrice(){
return 40;
}
public String getName(){
return "水晶球";
}
});//ta.test(注意接口方法的实现是写在括号内的); 最后的;也不能丢 
}
}


//以上的匿名内部类相当于有以下代码
/*
 class AnonymousProduct implements Product        //implements是实现接口的关键字 此处AnonymousProduct类实现了接口
 {
  public double getPrice(){
  return 40;
  }
  public String getName(){
  return "水晶球";
  }
 }
 ta.test(new AnonymousProduct());
*/
0 0
原创粉丝点击