继承和多态

面向对象编程时有一个非常重要的原则:write once ,only once! 编写一次,且仅编写一次!

如果没有继承这种机制我们可能要重复写很多代码!!下面来看一下继承!!!

 

一 继承

 

(1)子类如果继承父类必须使用extends这个关键字!

(2)子类调用父类的构造方法使用super关键字,也可以通过super来调用交类的!

(3)继承不允许多重继承,只能单一继承.即:一个类只能继承一个类,不能继承多个类.但是一个类可以被多个类继承!

(4)在父类中只定义一些通用的方法和属性,子类会自动继承父类的方法和属性.但是子类还可以有自己特定的方法和属性!

(5)创建对象时,选创建父类的对象,再创建子类的对象.如果没有显示调用交类的构造方法,将自动调用父类的无参构造方法!

 

例:class Base{

        public String name;

        public Base(String PName){

            name=PName;

}

}

 

class Child extends Base{

        public Child(){

            name="hello";

            super("child");

}

}

 

以上子类的写法是错误的,super("child")必须写到第一位.因为创建对象时,要先创建父类的对象,再创建子类的对象!!!

 

二 方法的重写

定义:如果在子类中定义一个方法,其名称,返回类型号用参数列表正好与父类中某个方法的名称,返回类型及参数列表相匹配,那么可以说子类的方法重写(override)了父类的方法.

 

三 多态(是面对对象的核心)

同一个实现接口,使用不同的实例而执行不同的操作.

 

如何实现多态

(1)子类重写父类的方法

(2)把父类类型作为参数类型,该父类及其子类对象作为参数传入

(3)运行时,根据实际创建的对象类型动态决定使用哪个方法

以下例子详细说明:

/**
 * 这是一个teacher的父类
 * @author Administrator
 *
 */
public class Teacher {
 //私有属性
 private String name;
 private String school;
 
 //构造方法
 public Teacher(String name,String school){
  this.name=name;
  this.school=school;
 }
 
 /**
  * 授课的方法
  */
 public void giveLesson(){
  System.out.println("知识点讲解");
  System.out.println("总结提问");
 }
 
 public void introduction(){
  System.out.print("大家好!我是"+school+"的"+name+".");
 }
 
 
}

 

/**
 * 继承了teacher类的JavaTeacher类
 * @author Administrator
 *
 */
public class JavaTeacher extends Teacher {
 public JavaTeacher(String name,String school){
  super(name,school);
 }
 /**
  * 了类重写父类中授课的方法
  */
 public void giveLesson(){
  System.out.println("启动Eclipse");
  //调用父类的授课方法
  super.giveLesson();
 }

}

/**
 * 继承了teacher类的DotNetTeacher
 * @author Administrator
 *
 */
public class DotNetTeacher extends Teacher {
 //这个类的注释就不加了,同上一个类JavaTeacher
  public DotNetTeacher(String name,String school){
   super(name,school);
  }
  
  public void giveLesson(){
   System.out.println("启动 Visual studio 2008");
   super.giveLesson();
  }
}

 

/**
 * 这个类体现多态
 * @author Administrator
 *
 */
public class Polymorphism {
 
 /**
  * 对教员进行评估的方法
  */
 public void judage(Teacher t){
  t.giveLesson();
 }
 
 //用main方法来测试多态性
 public static void main(String[] args){
  Polymorphism p=new Polymorphism();
  p.judage(new JavaTeacher("李明","北京"));
  p.judage(new DotNetTeacher("李岚","郑州"));
 }

}

运行上边的类输出结果如下:

启动Eclipse
知识点讲解
总结提问


启动 Visual studio 2008
知识点讲解
总结提问

你可能感兴趣的:(继承和多态)