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

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

优质内容筛选与推荐>>
1、总结面试题
2、php.ini修改php上传文件大小限制的方法详解
3、zoj 2563 Long Dominoes
4、图灵奖
5、html5 DNS预获取(dns-prefetch)


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn