面向对象编程时有一个非常重要的原则: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
知识点讲解
总结提问