注意:本系列博客是在作者已经有一年多的C++经验的基础上学习Java的个人总结,可能并不适合所有看到这篇博客的人
一、内部类
1.内部类的写法与创建
package inner_class;
public class Example
{
//创建内部类的对像
public Inner create()
{
Inner n = new Inner();
return n;
}
/*内部类*/
public class Inner{
public int id;
public String name;
public void test()
{
System.out.println("id:"+id+",name:"+name);
}
}
}
package inner_class;
import inner_class.Example.Inner;
public class my
{
public static void main(String[] args)
{
//在Example的内部创建Inner
Example e = new Example();
Example.Inner nInner=e.create();
//在Example的外部创建Inner
// 不可以像c++中那样根据类型创建
//Example.Inner j=new Example().Inner();
Example.Inner jInner=e.new Inner();
}
}
Java中内部类的写法并没什么特别的,要注意他的创建有点特别,个人理解是内部类的创建必须基于外部类对象,内部类相当于外部类中的一个类型,必须在外部类实例化后外部类才可以创建。
2.内部类与外部类的关系
内部类同时包含两个this指针,一个指向他自己,一个指向外部类。这也说明了为什么内部类必须是基于外部类创建的基础上,其次内部类不仅可以访问自己,还可以访问外部类。
package inner_class;
public class Example
{
int number;
String adder;
//创建内部类的对像
public Inner create()
{
Inner n = new Inner();
return n;
}
/*内部类*/
public class Inner{
public int id;
public String name;
//访问自己
public void test()
{
this.id=10;
this.name="kk";
System.out.println("id:"+id+",name:"+name);
}
//访问外部类
public void test2()
{
number=1; //等价Example.this.number=1;
adder="hhhhh";
System.out.println("number:"+number+" adder:"+adder);
}
}
}
package inner_class;
import inner_class.Example.Inner;
public class my
{
public static void main(String[] args)
{
//在Example的内部创建Inner
Example e = new Example();
Example.Inner j=e.new Inner();
j.test();
j.test2();
}
}
3.内部匿名类
匿名类是内部类的简化的写法
BaseType obj=new BaseType()
{
//类的实现
}
4.内部类的意义
初学Java目前并没有实际感觉到内部类的意义
参考博文:http://www.cnblogs.com/chenssy/p/3388487.html
二、接口
1.接口的语法
使用关键字interface来创建一个接口,用关键字 implements 来实现这个接口
package Interface;
public interface data
{
int all_data(int a,int b);
}
package Interface;
public class ex implements data
{
@Override
public int all_data(int a,int b)
{
a=b+a;
return a;
}
}
package Interface;
public class my
{
public static void main(String[] args)
{
ex x = new ex();
int c=x.all_data(1, 2);
System.out.println(c);
}
}
注意:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多重继承
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误。
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
- 在Java中,类的多重继承是不合法,但接口允许多重继承,在接口的多重继承中extends关键字只需要使用一次,在其后跟着继承接口。
2.接口的意义
个人根据经验理解哈
【1】隐藏实现的细节,有些助于更加清晰的关注业务的整体逻辑。
【2】事先设置接口可以规范命名!
【3】方便维护,比如你要改进某个功能的算法,不会牵一发而动全身。仅仅改动接口实现部分即可。
【4】从语法角度讲方便实现回调机制!毕竟Java没有函数指针。
三、模板类
略过。。。语法和C++中的模板类似(几乎是一样的),其次自己写模板的可能性不太大,Java工具包中用到的都实现了就不用自己造轮子了,直接开车就好

----------------------------------------------------------------
本系列文章: