Java入门——抽象类和接口的基本概念

Java入门——抽象类和接口的基本概念


本blog内容:

  1. 抽象类的基本概念(重点)
  2. 接口的基本概念(重点)
  3. 对象的多态性(重点)
  4. instanceof关键字

开始本blog时间:

2016-09-16   16:21:09


 抽象类的基本概念(重点) 

  包含一个抽象方法的类一定是抽象类

  抽象类和抽象方法都要使用abstract关键字定义

  抽象方法只需要声明,不需要实现

  抽象类必须被继承,子类必须复写全部抽象方法

  

 1 package Sep13;
 2 
 3 public class AbstractClass {
 4 
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         B b=new B();
11         b.print();
12     }
13 
14 }
15 abstract class A{//定义抽象类
16     public static final String FLAG="CHINA";
17     private String name;
18     public String getName() {
19         return name;
20     }
21     public void setName(String name) {
22         this.name = name;
23     }
24     public abstract void print();//若在接口中可以省略abstract关键字
25 }
26 class B extends A{//继承抽象类
27     public void print(){
28         System.out.println("flag="+FLAG);
29         System.out.println("姓名="+super.getName());
30         
31     }
32 }
flag=CHINA
姓名=null

接口的基本概念(重点)

  是一种特殊的类,是由全局常量和公共的抽象方法(必须是public,可以省略)组成的。一个类可以实现多个接口,实际上也就摆脱了Java单继承的限制。

1:类实现接口
    class 类 implements 接口A,接口B{  
}
2:继承抽象类实现接口
    class 子类 extends 抽象类 implements 接口A,接口B,{
}
3:接口的继承
    interface 子接口 extends 父接口A,父接口B{}

对象的多态性

  (1)方法的重载与覆写

  (2)对象的多态性

对象向上转型:父类 父类对象 =子类实例(自动完成)
对象向下转型:子类 子类对象=(子类)父类实例
 1 public class Wine {
 2     public void fun1(){
 3         System.out.println("Wine 的Fun.....");
 4         fun2();
 5     }
 6     
 7     public void fun2(){
 8         System.out.println("Wine 的Fun2...");
 9     }
10 }
11 
12 public class JNC extends Wine{
13     /**
14      * @desc 子类重载父类方法
15      *        父类中不存在该方法,向上转型后,父类是不能引用该方法的
16      * @param a
17      * @return void
18      */
19     public void fun1(String a){
20         System.out.println("JNC 的 Fun1...");
21         fun2();
22     }
23     
24     /**
25      * 子类重写父类方法
26      * 指向子类的父类引用调用fun2时,必定是调用该方法
27      */
28     public void fun2(){
29         System.out.println("JNC 的Fun2...");
30     }
31 }
32 
33 public class Test {
34     public static void main(String[] args) {
35         Wine a = new JNC();
36         a.fun1();
37     }
38 }
39 -------------------------------------------------
40 Output:
41 Wine 的Fun.....
42 JNC 的Fun2...

参见:http://www.cnblogs.com/chenssy/p/3372798.html

总结:向上转型:执行所指向的子类中的方法。但是前提是父类中定义的该方法,如果父类中没有子类中的方法,则无法引用该方法,换言之:子类重写的方法可以应用,子类重载或重新定义的方法,无法引用。


 instanceof关键字

  在Java中使用instanceof关键字判断一个对象到底是那个类的实例,格式如下所示:

 1 package Sep16;
 2 
 3 public class instanceofDemo {
 4 
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         A a1=new B();//通过向上转型实例化A类对象
11         System.out.println("A a1=new B():"+"\t"+(a1 instanceof A));
12         System.out.println("A a1=new B():"+"\t"+(a1 instanceof B));
13         A a2=new A();//直接实例化A类对象
14         System.out.println("A a2=new A():"+"\t"+(a2 instanceof A));
15         System.out.println("A a2=new A():"+"\t"+(a2 instanceof B));
16     }
17 
18 }
19 class A{
20     public void fun1(){
21         System.out.println("A---->public void fun1(){}");
22     }
23     public void fun2(){
24         this.fun1();
25     }
26 }
27 class B extends A{
28     public void fun1(){
29         System.out.println("B---->public void fun1(){}");
30     }
31     public void fun3(){
32         System.out.println("B---->public void fun3(){}");
33     }
34 }
A a1=new B():    true
A a1=new B():    true//向上转型的实例化对象即是A类对象,也是B类对象
A a2=new A():    true
A a2=new A():    false

 

 

posted @ 2016-09-16 16:16  聪哥聪哥  阅读(188)  评论(0编辑  收藏  举报