zoukankan      html  css  js  c++  java
  • java oop

     /**
     多层嵌套内部类, 调用时要层层往下调用
     格式:
     外部类.内部类1.内部类2 对象名 = new 外部类().new 内部类1().new 内部类2();
     对象名.属性/方法名();
     */ 
    class Outer
    {
    	public void oSay()
    	{
    		System.out.println("这是 outer 方法");
    	}
    	public class Inter1
    	{
    		public void iSay()
    		{
    			System.out.println("这是 inter1 方法");
    		}
    		public class Inter2
    		{
    			public void say()
    			{
    				System.out.println("这是 inter2 的 say method");
    			}
    		}
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Outer.Inter1.Inter2 oii = new Outer().new Inter1().new Inter2();
    		oii.say();
    	}
    }
    // =============
    /**
    实例内部类 Inter与外部类 Outer有着同名的成员变量i,则在内部类 Inter中,
    i,this.i和 Inter.this.i都表示为 Inter类的成员i;而 Outer.this.i才表示外部类 Outer
    的成员
    */
    class Outer
    {
    	int i = 10;
    	public class Inter
    	{
    		int i = 20;
    		public void getOuterI()
    		{
    			System.out.println("i表示为 Inter中的 i 值: "+i); // 20
    			System.out.println("this.i表示为 Inter中的 i 值;"+this.i); // 20
    			System.out.println("Inter.this.i表示为 Inter 中 i 的值:"+Inter.this.i); // 20
    			System.out.println("Outer.this.i表示为 Outer中的 i 值:"+Outer.this.i); // 10
    		}
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Outer.Inter oi = new Outer().new Inter();
    		oi.getOuterI();
    	}
    }
    // =============
    /**
    静态内部类创建对象实例
    外部类.静态内部类 静态内部类对象 = new 外部类.静态内部类();
    */
    class Outer
    {
    	private int a = 4; // 定义实例属性 a
    	private static int b = 5; // 定义静态属性 b
    	public static class Inter  // 定义静态内部类
    	{
    		private int x = 100;		// 定义实例属性 x
    		private static int y = 200;  // 定义静态属性 y 
    		public void add()					// 定义实例方法
    		{
    			// 通过外部类的实例对象调用外部类的非静态成员
    			int temp = new Outer().a; 
    			System.out.println(temp+"+"+x+"="+(x+temp));
    		}
    		public static void mul() // 定义静态方法
    		{
    			// 直接调用外部类的静态成员
    			System.out.println(b+"+"+y+"="+(b+y));
    		}
    	}
    	public void getInfo()
    	{
    		// 通过内部类对象访问静态内部类的非静态方法
    		new Inter().add();
    		// 直接通过"静态内部类.静态方法"形式访问静态内部类的静态方法
    		Inter.mul();
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Outer out = new Outer(); // 创建外部类实例
    		out.getInfo();
    		Outer.Inter in = new Outer.Inter(); // 创建内部类实例
    		in.add();
    		in.mul();
    	}
    }
    /*
    4+100=104
    5+200=205
    4+100=104
    5+200=205
    */
    // =============
    /*
    局部内部类:
    是指定义在方法体内的内部类,局部内部类仅在该方法里有效,因此,
    局部内部类不能被外部类和外部类以外的其它类访问,所以局部内部类
    不需要访问控制符和 static 修饰符的
    */
    class Outer
    {
    	public void fun()
    	{
    		class Inter
    		{
    			public int i = 90;
    		}
    		Inter in = new Inter();
    		System.out.println(in.i);
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Outer out = new Outer();
    		out.fun();
    	}
    }
    // =============
    /*
    局部内部类:
    是指定义在方法体内的内部类,局部内部类仅在该方法里有效,因此,
    局部内部类不能被外部类和外部类以外的其它类访问,所以局部内部类
    不需要访问控制符和 static 修饰符的
    */
    class Outer
    {
    	public void fun()
    	{
    		class Inter				// 定义局部内部类
    		{
    			public int i = 90;
    		}
    		Inter in = new Inter(); // 创建局部内部类的实例
    		System.out.println(in.i);
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Outer out = new Outer(); // 创建外部类实例
    		out.fun();
    	}
    }
    // ============
    /*
    局部内部类可以访问外部类的所有成员,包括私有成员。
    若局部内部类定义在静态方法体内时,局部内部类不能直接访问外部类的非静态成员,
    但是可以访问外部类的静态成员。若需要调用外部类的非静态成员时,
    可以通过外部类的实例。
    */
    class Outer
    {
    	private float f = 1.0F; //实例属性
    	private static int x = 90; // 静态属性
    	public void fun1()	// 实例方法
    	{
    		class Inter1		// 定义局部内部类
    		{
    			private float interF = 4.0F;
    			public Inter1()  // 构造方法
    			{
    				System.out.println(f+"+"+interF+"="+(f+interF));
    			}
    		}
    		new Inter1();  //匿名对象
    	}
    	
    	public static void fun2()		// 静态方法
    	{
    		class Inter2
    		{
    			private int i = 10; 
    			public Inter2()
    			{
    				System.out.println(i+"+"+x+"="+(i+x));
    				float temp = new Outer().f;
    				System.out.println(i+"+"+temp+"="+(i+temp));
    			}
    		}
    		new Inter2();
    	}
    }	
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Outer out = new Outer();
    		out.fun1();
    		out.fun2();
    	}
    }
    // ==========
    /*
    匿名内部类是指在定义时没有名称的内部类,必须在声明时候时使用 new 主义声明类.
    匿名内部类是一种特殊的内部类,除了具有普通内部类的特点以外,还有自己的一些特点。
    匿名内部类一般只使用一次
    格式:
    new <类/接口>([参数列表]){
    	......
    }
    虽然匿名内部类没有类名,匿名内部类必须扩展一个基类或实现一个接口,但不要显式地
    使用 extends 或 implements 关键字。如果匿名内部类继承抽象类或实现接口时,还要实现
    父类及接口中所有的抽象方法。
    */
    // 以下的匿名内部类继承了抽象类
    abstract class AbstractClass  // 定义抽象类
    {
    	public abstract void getInfo(); // 声明抽象方法
    }
    class Inter
    {
    	public void print()
    	{
    		show(new AbstractClass(){  // 匿名内部类
    			public void getInfo()
    			{
    				System.out.println("Hi,lin3615");
    			}
    		}); 
    	}
    	public void show(AbstractClass a) // 传入抽象类实例
    	{
    		a.getInfo();			// 调用抽象类方法
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		new Inter().print(); // 创建 Inter类的实例并调用 print方法
    	}
    }
    // ============
    //定义类
    访问控制符 [修饰符] class 类名
    {
    	访问控制符 [修饰符] 数据类型 属性名;
    	.....;
    	访问控制符 [修饰符] 数据类型 方法名(参数列表)
    	{
    
    	}
    }
    访问控制符:主要有 默认控制符(无关键词),public
    修饰符: static final abstract ...
    
    // 创建对象
    // 格式1
    类名 对象名=null;
    对象名 = new 类名();
    
    // 格式2
    类名 对象名 = new 类名();
    
    class Person
    {
    	String name;
    	int age;
    	public void say()
    	{
    		System.out.println("my name is "+name+",age is "+age);
    	}
    }
    
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Person p1 = null;
    		p1 = new Person();
    
    		Person p2 = new Person();
    		Person p3 = p2;
    
    		p1.name="小二";
    		p1.age = 26;
    		p1.say(); // 输出
    
    	}
    }
    // =================
    // -------------
    class Person
    {
    	private String name;
    	private int age;
    	public void setName(String nn)
    	{
    		this.name = nn;
    	}
    	public void setAge(int aa)
    	{
    		this.age = aa;
    	}
    	public void say()
    	{
    		System.out.println("my name is "+name+",age is "+age);
    	}
    }
    
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Person p1 = null;
    		p1 = new Person();
    		p1.setName("lin3615");
    		p1.setAge(26);
    		p1.say();
    
    	}
    }
    // ====================
    
    匿名对象:指没有栈空间的对象,即没有没有明显给出名字的对象。
    匿名对象使用的是堆内存,是通过关键词new进行开辟的,只能使用一次
    class Person
    {
    	private String name;
    	private int age;
    	public  Person(String s, int a)
    	{
    		this.name =s;
    		this.age = a;
    	}
    	public void setName(String nn)
    	{
    		this.name = nn;
    	}
    	public void setAge(int aa)
    	{
    		this.age = aa;
    	}
    	public void say()
    	{
    		System.out.println("my name is "+name+",age is "+age);
    	}
    }
    
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Person p1 = new Person("lin", 26);
    		p1.say();
    	}
    }
    
    // 构造函数,也可重载,如果没有显示声明,则调用系统默认的,(是一个的无参方法)
    构造方法与类名一致
    不能有任何返回值的类型声明,包括 void
    不能使用return 
    不能被static,final,abstract,native和synchronized 修饰
    // 创建构造方法:
    格式1:
    访问控制符 类名()
    {
    	//
    }
    
    格式2:
    访问控制符 类名(参数列表)
    {
    	//
    }
    
    // static 静态,java不没有传统意义上的全局,所以可用此表示全局
    public class Hi
    {
    	public static int ticket = 10; //定义静态变量
    	public void sell()	// 定义sell()方法
    	{
    		ticket--;
    		System.out.println("剩下 "+ticket);
    	}
    	public static void left()  // 定义静态方法 left()
    	{
    		int i = ticket-2;
    		System.out.println("还剩下:"+i);
    	}
    	public static void main(String[] args)
    	{
    		int x = ticket--;   // 直接访问 ticket
    		System.out.println("x = "+x+", ticket = "+ticket);
    		int y = Hi.ticket--;  // 通过类名访问
    		System.out.println("y = "+y+" ticket = "+ticket);
    		Hi str = new Hi();
    		str.left();				// 通过非静态访问
    		int k = str.ticket--;		// 通过实例访问
    		System.out.println("k = "+k+", ticket = "+ticket);
    		System.out.println(Hi.ticket);	// 通过类访问
    		left();									// 通过静态访问
    		Hi.left();							// 通过非静态访问
    	}
    }
    /*
    x = 10, ticket = 9
    y = 9 ticket = 8
    还剩下:6
    k = 8, ticket = 7
    7
    还剩下:5
    还剩下:5
    */
    // ========================
    public class Hi
    {
    	{				// begin 构造块
    		System.out.println("构造块1");
    	}				// end 构造块
    
    
    	{		// begin 构造块
    		System.out.println("构造块2");
    	}	// end 构造块
    	public Hi()
    	{
    		System.out.println("构造方法");
    	}
    	public static void main(String[] args)
    	{
    		new Hi();
    		new Hi();
    		new Hi();
    	}
    }
    /*
    构造块1
    构造块2
    构造方法
    构造块1
    构造块2
    构造方法
    构造块1
    构造块2
    构造方法
    */
    //====================
    // 静态代码块只会执行一次
    class Code
    {
    	{
    		System.out.println("code的构造块");  // 构造代码块  4
    	}
    	static
    	{
    		System.out.println("code 的静态代码块");  // 静态代码块  3
    	}
    
    	public Code()
    	{
    		System.out.println("code 的构造方法普通代码块"); // 构造方法
    	}
    }
    public class Hi
    {
    	{
    		System.out.println("Hi 的构造块");  // 构造代码块
    	}
    	static
    	{	
    		System.out.println("Hi 的静态代码块");  // 静态代码块   1
    	}
    
    	public Hi()
    	{
    		System.out.println("hi 的构造方法普通块");  // 构造方法
    	}
    	public static void main(String[] args)
    	{
    		System.out.println("Hi 的主体方法");  //2
    		new Code();
    		new Code();
    		new Hi();
    		new Hi();
    	}
    }
    /** 静态代码块只会执行一次,无论在一次中,实例多少都是一次
    Hi 的静态代码块
    Hi 的主体方法
    code 的静态代码块
    code的构造块
    code 的构造方法普通代码块
    code的构造块
    code 的构造方法普通代码块
    Hi 的构造块
    hi 的构造方法普通块
    Hi 的构造块
    hi 的构造方法普通块
    */
    // ============
    
    // 使用 package 定义包
    // 定义包就是将声明的类放入包中,为包指定包名,格式如下:
    // package 包名1[.子包名1.子包名2....];
    package org.com.pack;
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		System.out.println("定义包");
    	}
    }
    
    // package 语句必须是程序中可执行的第一行代码
    // package 语句只能有一句
    // 在前面的包名是 后面的包名 的父目录
    // 没有 package 语句,则默认无包名
    // 用javac 编译,编译如下:
    // javac -d . Hi.java
    // -d 表示生成目录. . 表示目录的位置,此表示生成为当前目录,最终会生成 org/com/pack/Hi.class
    // 执行时用 java 包路径.类名: java org.com.pack.Hi
    
    // 当定义包后,同一个包中的类是默认导入的,如果一个类访问来自另一个包中的类时,
    // 前者必须通过 import 语句把 后者导入才能使用。
    // import 语法格式
    // 格式1:import 包名[.子包名...].类名;  只会导入当前的类
    // 格式2: import 包名[.子包名 ...].*; 会导入包中所有的类,但不会导入其子包中的类,要用到时还得手动导入
    // ===================
    
    // 建立 Student.java, Student.class 位于 org.com.pack.stu中
    package org.com.pack.stu;
    public class Student
    {
    	private String name;
    	private int age;
    	public Student()
    	{
    
    	}
    
    	public Student(String name, int age)
    	{
    		setName(name);
    		setAge(age);
    	}
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	public void setAge(int age)
    	{
    		this.age = age;
    	}
    	public String getName()
    	{
    		return this.name;
    	}
    	public int getAge()
    	{	
    		return this.age;
    	}
    	public void show()
    	{
    		System.out.println("my name is "+this.name+" and age is "+this.age);
    	}
    }
    
    // 建立 Hi.java, 生成的类位于包 org.com.pack.pack中
    package org.com.pack.pack;
    import org.com.pack.stu.Student;
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Student stu = new Student("lin3615", 26);
    		stu.show();
    	}
    }
    // javac -d . 文件1.java 文件2.java ...可以连接多个一起编译
    // javac -d . Student.java Hi.java
    // java org.com.pack.pack.Hi
    // =====================
    // 静态导入
    // Student.java
    package org.com.pack.area;
    public class Student
    {
    	public static double PI = 3.14;
    	public static double round(int r)
    	{
    		return PI*r*r;
    	}
    	public static int square(int a)
    	{
    		return a*a;
    	}
    }
    
    // Hi.java
    package org.com.pack.pack;
    import static org.com.pack.area.Student.*;
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		System.out.println("PI = "+PI);
    		System.out.println("ROUND = "+round(10));
    		System.out.println("square = "+square(10));
    	}
    }
    // javac -d . Student.java Hi.java
    // java org.com.pack.pack.Hi
    
    // 手动装箱/拆箱
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		int x = 100;
    		Integer in = new Integer(x); // 手动装箱
    		System.out.println(in);
    		Float f = new Float(3.14F);
    		float y = f.floatValue();   // 手动拆箱
    		System.out.println(y);
    	}
    }
    // ===================
    // -----------
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		int x = 100;
    		Integer in = x;	// 自动装箱
    		System.out.println(in);
    		Float f = 10.98F;
    		float y = f;  // 自动拆箱
    		System.out.println(f);
    	}
    }
    
    // 转换成字符串,用封装中的 toString() 方法
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		int x = 100;
    		Integer in = new Integer(x);
    		String ii = in.toString();
    		Float f = new Float(10.90F);
    		String ff = f.toString();
    		Double d = new Double(89.76D);
    		String dd = d.toString();
    		System.out.println(ii+","+ff+","+dd);
    	}
    }
    // ================
    // 字符转为数值 parseXxx(string str)/ parseXxx(String str, int i),其中 Xxx: Int,Double ...
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		String ii = "333";
    		String dd = "1.99";
    		int i = Integer.parseInt(ii);  // 字符串转为整型
    		double d = Double.parseDouble(dd);  // 字符串转为浮点
    		System.out.println(i*d);
    	}
    }
    // ===================
    
    // --------------
    // final 变量,属性,引用,其中引用的属性可以改变
    public class Hi
    {
    	final float PI = 3.14f;
    	final int arrInt[] = {1,2,3,4};
    	final int num;
    	final String str;
    	{
    		num = 100;
    	}
    
    	public Hi()
    	{
    		str = "lin3615";
    	}
    	public static void main(String[] args)
    	{
    		final char c = 'A';
    		Hi p = new Hi();
    		System.out.println("c = "+c);
    		System.out.println("PI = "+p.PI);
    		System.out.println("num = "+p.num);
    		System.out.println("Str = "+p.str);
    		for(int i=0; i<4; i++)
    		{
    			System.out.print(p.arrInt[i]+" ");
    		}
    		System.out.println();
    		for(int j = 0; j< 4; j++)
    		{
    			p.arrInt[j] = p.arrInt[j] * 10;
    		}
    		for(int j = 0; j< 4; j++)
    		{
    			System.out.print(p.arrInt[j]+" ");
    		}
    	}
    
    }
    // ================
    // ------------
    // final 方法不可继承,但可重写
    class Base
    {
    	public final void add(int x, int y)
    	{
    		System.out.println("x+y = "+(x+y));
    	}
    }
    class Sub extends Base
    {
    	public final void add(int x, int y, int z)
    	{
    		System.out.println("x+y+z = "+(x+y+z));
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Sub sub = new Sub();
    		sub.add(1,2);
    		sub.add(1,2,3);
    	}
    }
    
    // ==============
    // 如果子类没有继承父类的抽象方法,则报错
    abstract class Person
    {
    	public static final String contry = "China";
    	private String name;
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	public String getName()
    	{
    		return this.name;
    	}
    	public abstract void tell();
    	// public abstract void say();
    }
    class Student extends Person
    {
    	public void tell()
    	{
    		System.out.println("my name "+this.getName()+", and "+this.contry);
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Student stu = new Student();
    		stu.setName("lin3615");
    		stu.tell();
    	}
    }
    // =============
    // 调用抽象类中的构造方法,隐含 super();
    abstract class Person
    {
    	public Person()
    	{
    		System.out.println("这是父类的构造方法");
    	}
    }
    class Student extends Person
    {
    	public Student()
    	{
    		System.out.println("这是 student 方法");
    	}
    }
    public class Hi 
    {
    	public static void main(String[] args)
    	{
    		Student stu = new Student();
    	}
    }
    // 这是父类的构造方法
    // 这是 student 方法
    
    // ==============
    // 显示用 supper()
    abstract class Shape
    {
    	private float width;
    	private float high;
    	public Shape()
    	{
    
    	}
    	public Shape(float width, float high)
    	{
    		this.width = width;
    		this.high = high;
    	}
    	public void setWidth(float width)
    	{
    		this.width = width;
    	}
    
    	public float getWidth()
    	{
    		return this.width;
    	}
    
    	public void setHigh(float high)
    	{
    		this.high = high;
    	}
    	public float getHigh()
    	{
    		return this.high;
    	}
    	public abstract void area();
    	public abstract void cir();
    }
    class Rectangle extends Shape
    {
    	public Rectangle()
    	{
    
    	}
    	public Rectangle(float width, float high)
    	{
    		super(width, high);
    	}
    	public void area()
    	{
    		System.out.println(this.getWidth() * this.getHigh());
    	}
    	public void cir()
    	{
    		System.out.println(this.getWidth() * this.getWidth());
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Rectangle rec = new Rectangle(1.8f,2.1f);
    		rec.area();
    		rec.cir();
    	}
    }
    // -============
    
    // 接口
    /**
     格式
     [public] interface 接口名称 [extends 父接口1,父接口2,..]
     {
    	 [public static final ] 数据类型 变量名 = 初值; // 默认就是 public static final
    	 [public abstract] [native ] 返回类型 方法体([参数列表]); // 默认就是 public abstract
    }
    */
    interface InterShape
    {
    	public static final float PI = 3.14F;
    	public abstract void getArea();
    	public abstract void getCir();
    }
    class Round implements InterShape
    {
    	private float radius;
    	public Round()
    	{
    
    	}
    	public Round(float radius)
    	{
    		this.radius = radius;
    	}
    	public void setRound(float radius)
    	{
    		this.radius = radius;
    	}
    	public float getRound()
    	{
    		return this.radius;
    	}
    	public void getArea()
    	{
    		System.out.println(this.getRound() * InterShape.PI);
    	}
    	public void getCir()
    	{
    
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Round rr = new Round(3.9F);
    		rr.getArea();
    	}
    }
    // ===============
    
    // 抽象类实现接口
    interface InterShape
    {
    	public static final float PI = 3.14f;
    	public abstract void getArea();
    	public abstract void getCir();
    }
    abstract class Sphere implements InterShape
    {
    	public abstract void getVolume();
    }
    class Round extends Sphere
    {
    	private float radius;
    	public Round()
    	{
    
    	}
    	public float getRadius()
    	{
    		return this.radius;
    	}
    	public Round(float radius)
    	{
    		this.radius = radius;
    	}
    	public void getArea()
    	{
    		System.out.println(InterShape.PI*this.getRadius());
    	}
    	public void getCir()
    	{
    		System.out.println(InterShape.PI+this.getRadius());
    	}
    
    	public void getVolume()
    	{
    		System.out.println(InterShape.PI-this.getRadius());
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Round rr = new Round(10.88f);
    		rr.getArea();
    	}
    }
    // ================
    
    // 接口多重继承
    // [public] interface 子接口 extends 父接口A[,父接口B....]{}
    interface Ok
    {
    	public static final float PI = 3.14f;
    }
    interface InterShape
    {
    	public abstract void getArea();
    }
    interface InterTwo extends Ok,InterShape
    {
    		public abstract void getCir();
    }
    abstract class Sphere implements InterTwo
    {
    	public abstract void getVolume();
    }
    class Round extends Sphere
    {
    	private float radius;
    	public Round()
    	{
    
    	}
    	public float getRadius()
    	{
    		return this.radius;
    	}
    	public Round(float radius)
    	{
    		this.radius = radius;
    	}
    	public void getArea()
    	{
    		System.out.println(InterTwo.PI*this.getRadius());
    	}
    	public void getCir()
    	{
    		System.out.println(InterTwo.PI+this.getRadius());
    	}
    
    	public void getVolume()
    	{
    		System.out.println(InterTwo.PI-this.getRadius());
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Round rr = new Round(10.88f);
    		rr.getArea();
    	}
    }
    // ============
    // 对象数组
    // 类名 对象数组名[]  = new 类名[数组长度]
    // 动态初始化
    class School
    {
    	private String name;
    	public School(){}
    	public School(String name)
    	{
    		setName(name);
    	}
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	public String getName()
    	{
    		return this.name;
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		School school[] = new School[4];
    		school[0] = new School("一加大学");
    		school[1] = new School("二个大学");
    		school[2] = new School("三个大学");
    		school[3] = new School("aaaaa");
    		for(School a:school)
    		{
    			System.out.print(a.getName()+" ");
    		}
    	}
    }
    // ================
    // 静态初始化
    class School
    {
    	private String name;
    	public School(){}
    	public School(String name)
    	{
    		setName(name);
    	}
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	public String getName()
    	{
    		return this.name;
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		School school[] = {new School("aa"), new School("bbb"), new School("cccc")};
    		for(School aa:school)
    		{
    			System.out.print(aa.getName()+" ");
    		}
    	}
    }
    // ===================
    // 内部类
    /*
    [public ] class 外部类名
    {
    	[访问控制符] [修饰符]  成员;
    	...
    	[访问控制符] [修饰符] class 内部类
    	{
    		[访问控制符] [修饰符] 成员; 
    	} 
    }
    */
    // 定义内部类
    class Outer
    {
    	private String str = "lin3615";
    	public class Inter
    	{
    		public void add(int x, int y)
    		{
    			System.out.println("x+y = "+(x+y));
    		}
    		public void getStr()
    		{
    			System.out.println(str);
    		}
    	}
    	public void getInfo()
    	{
    		new Inter().getStr();
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		Outer out = new Outer();
    		out.getInfo();
    		Outer.Inter oin = new Outer().new Inter();
    		oin.add(3,5);
    		oin.getStr();
    	}
    }
    // =================
      
    // ==========
    /*
    直接使用 new Inter() 为接口实例化,但接口本身是不能实例化的,
    所以在 new Inter() 之后的花括号 {} 中写的就是实现接口中的抽象方法
    */
    interface Inter				// 定义接口
    {
    	public abstract void getInfo();  // 声明抽象方法
    }
    class InterClass			// 定义类
    {
    	public void print()
    	{
    		show(new Inter(){		// 匿名内部类
    			public void getInfo()
    			{
    				System.out.println("这是匿名内部类实现接口");
    			}
    		});
    	}
    	public void show(Inter i)  // 传入接口
    	{
    		i.getInfo();						// 调用抽象类方法
    	}
    }
    public class Hi
    {
    	public static void main(String[] args)
    	{
    		new InterClass().print(); // 创建 InterClass 类的实例并调用print()方法
    	}
    }
    // =============
    

      

  • 相关阅读:
    JavaScript连等赋值
    vue入坑总结
    form表单与后台请求的关系
    JavaScript构造函数、继承的理解
    前端知识未学习点
    js垃圾回收机制
    前端闭包
    html中strong与b,em与i标签的区别(转帖)
    Docker 搭建开源跳板机_jumpserver (运维开源堡垒机_jumpserver) Centos_7.0
    python EasyUI + Django--整合 CSRF 防护去除
  • 原文地址:https://www.cnblogs.com/lin3615/p/4240552.html
Copyright © 2011-2022 走看看