1. 程式人生 > >java 內部類 匿名內部類 匿名類結合泛型 使用 詳細教程 講解

java 內部類 匿名內部類 匿名類結合泛型 使用 詳細教程 講解

public class Inner{
	public static void main(String[] args){
		Xiao x = new Xiao();
		x.study();
		x.start().play();
		//引數是匿名類的例項物件
		
		x.sport(new Car(){
			public void run(){
				System.out.println("能跑");
			}
		});
		
		//上面的方法分步詳解:
		class Xcar implements Car{
			public void run(){
				System.out.println("匿名類方法run");
			}
		}
		Xcar xc = new Xcar();
		x.sport(xc);
		
		
		//x.eat() 返回的是匿名類的例項物件   所以有eating方法
		String str = x.eat().eating();
		System.out.println(str);
		
		//實現泛型介面
		class Xdog implements Dog<String>{
			public String begin(String s){
				System.out.println("泛型介面"+s);
				return s;
			}
		}
		Xdog xd = new Xdog();//例項化
		x.doing(xd);
		
		//匿名泛型類
		Chicken<String> c = new Chicken<String>(){
			public String fly(String s){
				System.out.println("flying"+s);
				return s;
			}
		};
		System.out.println(c);
		x.going(c);
	}
}

class Person{
	public void study(){
		System.out.println("我會學習");
	}
}
class Computer{
	public void play(){
		System.out.println("我會玩電腦");
	}
}
interface Car{
	void run();
}
abstract class Cat{
	abstract String eating();
}
interface Dog<T>{
	T begin(String s);
}
interface Chicken<T>{
	T fly(String s);
}
class Xiao extends Person{// 外部類繼承Person  肯定會有Person 的方法
	public class Lei extends Computer{ //內部類繼承  Computer Lei 的例項物件 肯定有Computer的方法
	
	}
	public Lei start(){
		return new Lei();//返回物件例項
	}
	public void sport(Car c){//引數是介面的例項
		c.run();
	}
	public Cat eat(){
		return new Cat(){//匿名內部類    return 的就是匿名內部類的例項   所以例項的地址 可以呼叫例項的eating方法
			private String str = "小魚";
			public String eating(){
				System.out.println("貓吃魚");
				return str;
			};
		};
	}
	public void doing(Dog<String> d){
		System.out.println(d.begin("thanking"));
	}
	public <H> void going(Chicken<H> c){// void 前面需要加上<H> <>內的字母不限  方法泛型 區域性宣告的
		System.out.println(c.fly("小雞快跑。。。"));
	}
}

執行結果如下: