Free Talk 
      
面向对象是Java语言的核心,涉及的知识点非常多,这篇文章主要讲解三大特征(封装、继承、多态)、接口、异常等特性。其余部分会在之后单独地另写几篇文章。 
参考资料:JavaGuide 
 
        
           三大特征 
      
        
           封装 
      
封装顾名思义,就是把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息,但是会提供一些可以被外界访问的方法来操作属性。  
简单的说,类会提供变量和方法供外界访问使用,就叫封装。
        
           继承 
      
继承,就是因为不同的类对象之间,有这个很多的共同点,因此可以创建一个具有共同点的父类,子类再继承父类。 
例如,小明同学、小红同学、小李同学,都共享学生的特性(班级、学号等)。同时,每一个对象还定义了额外的特性使得他们与众不同。例如小明的数学比较好,小红的性格惹人喜爱;小李的力气比较大。
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,**但不能选择性地继承父类。**通过使用继承,可以快速地创建新的类,可以提高代码的重用,程序的可维护性,节省大量创建新类的时间 ,提高我们的开发效率。
子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。  
子类可以拥有自己属性和方法,即子类可以对父类进行扩展。 
子类可以用自己的方式实现父类的方法。(以后介绍)。 
 
        
           多态 
      
多态,即表示一个对象具有多种的状态。具体表现为父类的引用指向子类的实例。简单来讲,多态就是同一个接口,使用不同的实例而执行不同操作。 多态资料 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 class  Animal  {	protected  String name;	 	public  Animal ()   { 		this .name = "Animal" ; 	} 	 	public  String getName ()   { 		return  this .name; 	} } class  Cat  extends  Animal  {	Cat(){ 		name = "Cat" ; 	} } class  Dog  extends  Animal  {	Dog(){ 		name = "Dog" ; 	} } public  class  Test   {	static  public  void  board (Animal s)   {		 		System.out.println(s.getName()); 	} 	 	public  static  void  main (String[] args)   { 		Animal animal = new  Animal();	 		Animal cat = new  Cat();			 		Animal dog = new  Dog();			 		 		board(animal); 		board(cat); 		board(dog); 		 	} } 
 
        
           接口 
      
在软件工程中,接口泛指供别人调用的方法或函数。在接口中,所有方法都必须是抽象方法,不能有实现。当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
    
      
      Java的类是不允许多继承的,而C++中是允许的,但是接口是允许多继承的。
     
  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 interface  Animal   {   public  void  eat ()  ;    public  void  travel ()  ; } public  class  MammalInt  implements  Animal  {     public  void  eat ()  {       System.out.println("Mammal eats" );    }      public  void  travel ()  {       System.out.println("Mammal travels" );    }       public  int  noOfLegs ()  {       return  0 ;    }      public  static  void  main (String args[])  {       MammalInt m = new  MammalInt();       m.eat();       m.travel();    } } 
 
        
           异常 
      
        
           异常的层次分类 
      
Java中异常的层次分类见下图,图片来源  
         
      
        
           Throwable类常用方法 
      
**public string getMessage():**返回异常发生时的简要描述 
**public string toString():**返回异常发生时的详细信息 
**public string getLocalizedMessage():**返回异常对象的本地化信息。使用 Throwable 的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与 getMessage()返回的结果相同 
**public void printStackTrace():**在控制台上打印 Throwable对象封装的异常信息 
 
        
           try-catch-finally 
      
try 块:  用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。 
catch 块:  用于处理 try 捕获到的异常。 
finally 块:  无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import  java.io.FileInputStream;import  java.io.FileNotFoundException;import  java.io.IOException;    public  class  Main   {    public  static  void  main (String[] args)   {         String str = new  Main().openFile();         System.out.println(str);               }           public  String openFile ()   {         try  {             FileInputStream inputStream = new  FileInputStream("d:/a.txt" );             int  ch = inputStream.read();             System.out.println("aaa" );             return  "step1" ;         } catch  (FileNotFoundException e) {             System.out.println("file not found" );             return  "step2" ;         }catch  (IOException e) {             System.out.println("io exception" );             return  "step3" ;         }finally {             System.out.println("finally block" );                      }     } } 
 
    
      
      执行结果: file not found finally block step2
     
  
可以看出,在try块中发生FileNotFoundException之后,就跳到第一个catch块,打印"file not found"信息,并将"step2"赋值给返回值,然后执行finally块,最后将返回值返回。 
从这个例子说明,无论try块或者catch块中是否包含return语句,都会执行finally块。 
代码来源