继承与多态

1.继承的使用

   class 子类名 extends 父类名{

     类体

  }

   java支持单继承,即只能有一个父类,但类之间的继承可以具有传递性。

   子类可以通过继承自动获得父类中访问权限为public、protected、default的成员变量和方法,但不能继承权限为private的成员变量和方法。

 

2.方法重载和方法覆盖

   方法重载:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。

   方法覆盖:如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法

public class People {  
    public String getName() {  
        return "people";  
    }  
  
}  
public class Student extends People {  
      
    public String getName() {  
        return "student";  
    }  
      
}  
public static void main(String[] args) {  
        People p=new People();  
        System.out.println(p.getName());//运行结果为people  
    
        Student s=new Student();  
        System.out.println(s.getName());//运行结果为student  
    
        People pp=new Student();  
        System.out.println(pp.getName());//运行结果为student  
  
    }  

    student类的getName方法成功覆盖了父类的方法

    如果想在子类中访问父类中国被覆盖的成员,可以使用关键字super来解决这一问题。如super.成员变量 或 super.成员方法。

    当局部变量和类的成员变量同名时,成员变量被隐藏。

    this.day=day;  //this用于表示当前变量,如果没有,左右的day均为局部变量。

 

   3.对象间的类型转换

      java支持父类和子类对象之间的类型转换,将子类对象抓换为父类时,可进行显式转换或隐式转换,将父类对象转换为子类对象,必须进行显式转换。

      a=(A)b;  //显式转换

      aa=b;     //隐式转换

 

   4.多态性

      A a=new B();

      等价于下面两个子句:

      B b=new B();

      A a=b;  //隐式类型转换

      这里子类重写了父类的方法,所以调用子类B的方法,不然调用父类A的方法。

 

   5.抽象类和抽象方法

     关键字abstract修饰的类称为抽象类,抽象类是一种没有完全实现的类。不能用它来实例化任何对象。

     抽象类可以含有抽象的方法,用abstract修饰,除方法体外都有。

 

   6.接口是抽象类的一种变体,,但它与抽象类又有一些差异,关键字为interface。

      具体不同:

      (1)抽象类中的方法不一定都是抽象的,而接口中的所有方法都是抽象的。

      (2)接口中的所有数据都是公有静态常量,即具有public,static,final属性,但一般不写这些修饰符。

      (3)因为接口中的所有方法都是抽象的,public的,因此必须在实现该接口的子类中重写这些方法。、

      例如:

      interface Myinter{

         double g=9.8;   //public static final double g=9.8; 

         void show();      //public abstract void show();

      }

   

      7.接口实现

      由接口生成子类通过关键字implements来实现一个接口。

      根据上节定义的接口Myinter,可以定义类Test:

      class Test implements Myinetr{

          public void show(){

               System.out.println("g="+g);

           }

      }

       与类之间的继承关系相似,接口之间也可以通过关键字extends进行继承,但其中的抽象方法不能被具体实现。

posted @ 2017-03-10 18:17  Johnny、  阅读(238)  评论(0编辑  收藏  举报