// static 定义的class都是独立于类之外的
// 使用static定义外部类,static定义的不管类,方法,只能访问static成员,所以static定义的内部类只能访问外部类中 static成员或者方法
class Outer1{
private static final String MSG = "www.msg";
static class Inner1{
public void print(){
System.out.println(Outer1.MSG);
}
}
}
public class StaticInnerDemo {
public static void main(String[] args) {
Outer1.Inner1 outer1 = new Outer1.Inner1();
outer1.print();
}
}
class Outer{
private String msg = "www.hello.cn";
public void fun(){
Inner inner = new Inner();
inner.print();
}
class Inner{
public void print(){
System.out.println(Outer.this.msg);
}
}
}
public class InnerDemo {
public static void main(String[] args) {
Outer outer = new Outer();
outer.fun();
}
}
package OutterInnerDemo;
interface IMessageWarp{
static interface IMessage{
public String getContent();
}
static interface IChannel{
public boolean connect();
}
public static void send(IMessage msg, IChannel channel){
if(channel.connect()){
System.out.println(msg.getContent());
}else {
System.out.println("消息通道无法建立,消息发送失败");
}
}
}
class DefaultMessage implements IMessageWarp.IMessage{
@Override
public String getContent(){
return "www.hello.cn";
}
}
class NetChannel implements IMessageWarp.IChannel{
@Override
public boolean connect(){
return true;
}
}
public class InterfaceInnerDemo {
public static void main(String[] args) {
IMessageWarp.send(new DefaultMessage(),new NetChannel());
}
}
package OutterInnerDemo;
// 方法中的内部类,内部类可以直接访问外部类中的私有属性,可以访问方法中的参数
class Outer2{
private String msg = "www.hello.cn";
public void fun(long time){
class Inner{
public void print(){
System.out.println(Outer2.this.msg);
System.out.println(time);
}
}
new Inner().print(); // 方法中直接实例内部类对象
}
}
public class MethodInnerDemo {
public static void main(String[] args) {
new Outer2().fun(22222222);
}
}
package OutterInnerDemo;
// 方法中的内部类,内部类可以直接访问外部类中的私有属性,可以访问方法中的参数,对于方法中的参数直接访问是从JDK1.8开始支持的
// 如果在1.8之前,方法中的参数必须添加final,
class Outer2{
private String msg = "www.hello.cn";
public void fun(long time){
class Inner{
public void print(){
System.out.println(Outer2.this.msg);
System.out.println(time);
}
}
new Inner().print(); // 方法中直接实例内部类对象
}
}
public class MethodInnerDemo {
public static void main(String[] args) {
new Outer2().fun(22222222);
}
}
package OutterInnerDemo;
// 类只用一次,可以考虑匿名内部类
interface IMessage{
public void send(String str);
}
class MessageImpl implements IMessage{
@Override
public void send(String str){
System.out.println(str);
}
}
public class AnonymousInnerDemo {
public static void main(String[] args) {
IMessage msg = new IMessage(){
@Override
public void send(String str){
System.out.println(str);
}
};
msg.send("www.ddddd");
}
}
// 优化为static
interface IMessage{
public void send(String str);
public static IMessage getInstance(){
return new IMessage() {
@Override
public void send(String str) {
System.out.println(str);
}
};
}
}
public class AnonymousInnerDemo {
public static void main(String[] args) {
IMessage.getInstance().send("www.ddddd");
}
}
class Outer{ private String msg = "www.hello.cn"; public void fun(){ Inner inner = new Inner(); inner.print(); } class Inner{ public void print(){ System.out.println(Outer.this.msg); } }}.