Java学习笔记之六——Java类的继承和多态(1)

一,Java类的继承

1,为什么要继承?

答:通过继承可以使对对象的描述更加清晰,可以实现代码的复用,可以实现重写类中的变量或方法,可以实现在无源代码的情况下修改被继承的类。

2,Java的类如何实现继承?

答:Java类的继承是单一的,也是完全继承的。通过关键词extends关键字来实现。被继承的类称为父类,继承父类的类称为子类。继承语法:public calss classname extends superclassname.因为Java类的继承是单一的,所以extends后面只能指定一个父类。而完全继承则是指“一个类继承了父类的所有成员变量和成员方法。

例:在l类1中的平面坐标系中设置x和y,当要再定义一个空间坐标系的时候只需继承类1,再在其子类中添加一个z轴就行了。

public class one{
    int x;
    int y;
    public one(){
        x = 0;
        y = 0;
    }
}

然后再定义类2,通过类2继承类1:

public class two extends one{       //继承类one
    int z;
    public one(){
    z = 0;
    }
}

这样就实现了类的继承。

3,类继承中的隐藏/覆盖/重载是怎么样的?

答:(1)类的隐藏:隐藏发生在子类和父类之间,针对父类中成员变量和静态方法而言的。当子类中声明与父类中声明的成员变量名相同时,则实现了对父类成员变量的隐藏。

  (2)类的覆盖:覆盖也是发生在子类和父类之间,是指在子类中声明一个与父类具有相同的方法名/输入参数列表/返回值/访问权限等的方法,除过方法体不同外。在子类中重新编写方法实现的功能。常被用于替换父类相同的方法,实现功能的更新。

例:

class three{
    public void Display(){     //定义父类中Display方法
        System.out.println("This is class three");
    }
}
class four extends three{        //继承类three
    public void Display(){           //覆盖父类three中的Display方法
        System.out.println("This is class four");
    }
}    

  (3)类的重载:可发生在父类与子类之间,也可发生在同一类中。是指在子类与父类之间或同一类中定义多个具有相同方法名/访问权限等的方法。

例:

class five{
    public void Display(){      //父类中Display方法
        System.out.println("this is class five");
    }
}

class six extends five{      //继承类five
    public void Display(String s){     //冲在父类中Display方法
        System.out.println(s);
    }
}

public class seven{
    public static void main(String[] args){
        six a = new six();
        a.Display();         //调用父类中Display方法
        a.Display("this is class six");    //调用子类中Display方法
    }
}

4,构造方法的重载.

在上例中 six a = new six();new后面是调用类的构造方法,如果当类没有构造方法的时候,创建类对象时调用无任何操作的默认构造方法。当子类有自身的无形式列表的构造方法时,创建对象时,会先创建父类的对象,再创建子类的对象。

如下面代码:

//第一个类-------父类
public class Output{
    public Output(){
        System.out.println("This is class Output");
    }
}


//第二个类-------子类
public class Input extends Output{
    public Input(){
        System.out.println("This is class Input");
    }
}


//第三个类
public class sample{
    public static void main(String[] args){
        Input a = new Input();
    }
}

上面代码最后输出为:

This is class Output

This is class Input

可见最后如果没有构造方法,创建对象后会先调用父类对象,后调用子类对象。

posted on 2013-01-10 11:31  liwustore  阅读(10289)  评论(0编辑  收藏  举报