内部类小记
来源:互联网 发布: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());
*/
内部类的创建 :
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
- 内部类小记
- Java内部类学习小记
- <fastjson>fastjson与内部类小记
- 关于Java和C#的内部类的小记
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- java中的常见异常及错误和处理方法
- 软件破解
- Linux客户端远程访问windows服务器
- python中lock和rlock(递归锁)的区别
- 第7周 深入理解计算机系统(第二版) 知识总结 第一、二章
- 内部类小记
- 欢迎使用CSDN-markdown编辑器
- 排序
- mysql死锁示例
- tomcat8设置https连接
- 三种线性排序算法: 计数排序、桶排序与基数排序
- Ecshop与Jquery冲突的解决方案2
- HDOJ4389_X mod f(X)
- 项目27---数组作数据成员