`

黑马程序员--java基础复习--抽象类、抽象方法和面向父类编程

阅读更多

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ---------------------

抽象的概念:

  抽象就是把一些事物的共性提炼出来,放到一个类中,把这些事物的不同之处交给子类去实现,比方说人都要吃东西,就可以给人一个吃东西的抽象方法,每个人在吃东西的时候就要自己确定到底吃什么,怎么吃,和谁吃。

 java中的抽象

  在java中抽象用abstract来表示,abstract可以修饰方法,也可以修饰类

 

  • 修饰类的时候,这个类会成为一个抽象类,这个类不能生成对象实例,但是可以作为变量声明的类型,这里要提的一点在进行变量声明是,要养成一个习惯:多声明成超类,这样就时时刻刻在使用多态了,java系统就是靠多态撑起来的。
  • 修饰方法的时候,这个方法就会成为抽象方法,只是被声明,没有被实现,什么叫实现,就是方法有{}这样的代码块。而抽象方法的{}直接用分号 ; 代替了。抽象方法定义的是一种标准:方法的功能,接收的参数等,抽象方法只能protected和public修饰的。因为其必须要能被子类访问并实现。

有抽象方法的一定是抽象类,但是抽象类中不一定要含有抽象方法,我们常用的WindowAdapter就是一个没有抽象方法的抽象类。这里说一下接口和抽象类的区别

  • abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
  • 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
  • abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。 
  • 实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
  • 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
  • 抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 
  • 接口中的方法默认都是 public,abstract 类型的。而abstract class中方法可以是protected abstract的,因为抽象类的下家全是子类,而interface的下家是所有类

抽象类的作用

  • 强迫子类复写一些功能。
  • 抽象类该如何描述事物,就如何描述事物,只不过,该事物出现了一些未实现的方法,需要明确实现。但是无法定义主体。通过抽象方法来实现。需要子类实现。
  • 抽象类比一般类多了抽象函数,就是在类中可以定义抽象方法。不可实例化。
  • 抽象类在公司通常不是由程序员定义的,而是由项目经理或者某个模块得设计人员。设计抽象类得原因通常只有一个:为了规范方法名。咱们都知道,抽象类必须要继承,不然没法用,作为模块设计者,可以把让底层程序员直接用得方法直接调用,而一些需要让程序员覆盖后自己做得方法则定义称抽象方法。

附上一个抽象类的使用例子

使用抽象类的时候一定要规范命名,让人家一看就明白了这个类是用来干嘛的

 

 

abstract class SayByeBye{
	protected abstract void sayByeBye();
}

class ChineByeBye extends SayByeBye{
	protected void sayByeBye() {
		System.out.println("再见");		
	}	
}

class JapanByeBye extends SayByeBye{
	protected void sayByeBye() {
		System.out.println("sa yo na la");		
	}	
}

class USByeBye extends SayByeBye{
	protected void sayByeBye() {
		System.out.println("See you");		
	}	
}

 ---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics