天天看点

黑马程序员_匿名内部类和面向对象总结

------- android培训、java培训、期待与您交流! ----------

匿名内部类:

通过两个示例来学习。

示例1:

interface A
{
	public void method();
}
class B
{
	int i = 10;
	class C implements A
	{
		public void method()
		{
			System.out.println(i);
		}
	}
	public void get(A a)
	{
		a.method();
	}
	public void test()
	{
		this.get(new C());
	}
}
class AnonymousClassTest
{
	public static void main(String[] args)
	{
		B b = new B();
		b.test();
	}
}
           
运算结果如下:
C:\Users\lenovo\Desktop>javac AnonymousClassTest.java

C:\Users\lenovo\Desktop>java AnonymousClassTest
10

C:\Users\lenovo\Desktop>
           

示例2:

interface A
{
	public void method();
}
class B
{
	int i = 10;
	public void get(A a)
	{
		a.method();
	}
	public void test()
	{
		this.get(new A()
		{
			public void method()
			{
				System.out.println("AnonymousClass:i = "+i);
			}
		});
	}
}
class AnonymousClassTest
{
	public static void main(String[] args)
	{
		B b = new B();
		b.test();
	}
}
           
运算结果如下:
C:\Users\lenovo\Desktop>javac AnonymousClassTest.java

C:\Users\lenovo\Desktop>java AnonymousClassTest
AnonymousClass:i = 10

C:\Users\lenovo\Desktop>
           

从示例1和示例2中的test方法,我们可以看到示例2没有直接implements接口A,但是在程序第14-20行,可以发现程序实现了接口A中的method()方法,并把整个的一个实现类,传递到了方法get()方法中,这就是所谓的匿名内部类。它不用声明实质上的类,就可以使用,上面14~20行有些读者会觉得难以理解,下面将再进行说明:

get(new A());	//传入一个A的对象
           

下面这段代码它的主要作用是传了一个A的对象用匿名的方式,之后实现A接口里的method()方法:

get(new A()
		{
			public void method1()
			{
				System.out.println("AnonymousClass:i = "+i);
			}
		});
           

面向对象总结:

1、通过extends关键字可将父类的成员(包含数据成员与方法)继承到子类,被private修饰的不可以被继承。

2、Java在执行子类的构造方法之前会先调用父类中无参的构造方法,其目的是为了对继承自父类的成员做初始化的操作。

3、父类有数个构造方法时,如要调用特定的构造方法,则可在子类的构造方法中,通过super()这个关键字来完成。

4、this()是在同一类内调用其它的构造方法,而super()则是从子类的构造方法调用其父类的构造方法。

5、this()除了可用来调用同一类内的其它构造方法之外,如果同一类内"实例变量"与局部(local)变量的名称相同时,也可利用它来调用同一类内的"实例变量"。

6、this()与super()其相似之处:

(1)当构造方法有重载时,两者均会根据所给予的参数的类型与个数正确地执行相对应的构造方法。

(2)两者均必须编写在构造方法内的第一行,也正是这个原因this()与super()无法同时存在同一个构造方法内。

7、"重载"(overloading):

它是指在相同类内,定义名称相同,但参数个数或类型不同的方法,因此Java便可依据参数的个数或类型调用相应的方法。

8、"复写"(overriding):

它是在子类当中,定义名称、参数个数与类型均与父类相同的方法,用以复写父类里的方法。

9、如果父类的方法不希望子类的方法来复写它,可在父类的方法之前加上"final"和"static"关键字,如此该方法便不会被复写。

10、final的另一个功用是把它加在数据成员变量前面,如此该变量就变成了一个常量(constant),如此便无法在程序代码中再做修改了。

11、所有的类均继承Object类。

12、复写Object类中的equals()方法可用来比较两个类的对象是否相等。

13、Java可以创建抽象类,专门用来当做父类。抽象类的作用类似于"模板",其目的是依据其格式来修改并创建新的类。

14、抽象类的方法可分为两种:一种是一般的方法,另一种是以abstract关键字开头的"抽象方法"。"抽象方法"并没有定义方法体,而是要保留给由抽象类派生出的新类来定义。

15、利用父类的变量数组来访问子类的内容的较好的做法是:

(1) 先创建父类的变量数组;

(2) 利用数组元素创建子类的对象,并以它来访问子类的内容。

16、抽象类不能直接用来产生对象。

17、接口的结构和抽象类非常相似,它也具有数据成员与抽象方法,但它与抽象类有两点不同:

(1)、接口的数据成员必须初始化。成员数据默认属性是public static final属性。

(2)、接口里的方法必须全部都声明成abstract,方法的默认属性是public abstract属性。

18、利用接口的特性来打造一个新的类,称为接口的实现(implementation)。Java并不允许多重继承,但支持多实现。

19、接口与一般类一样,均可通过扩展的技术来派生出新的接口。原来的接口称为基本接口或父接口,派生出的接口称为派生接口或子接口。通过这种机制,派生接口不仅可以保留父接口的成员,同时也可以加入新的成员以满足实际的需要。

20、Java对象的多态性:向上转型(自动)和向下转型(强制)。

21、通过instanceof关键字,可以判断对象属于那个类。

22、匿名内部类(Anonymous inner class)的好处是可利用内部类创建不具有名称的对象,并利用它访问到类里的成员。

------- android培训、java培训、期待与您交流! ----------

详细请登录:http://edu.csdn.net/heima