继承性和方法重写

面向对象的特征之二

一、继承性的好处

1、减少了代码的冗余,提高了代码的复用性

2、便于功能的扩展

3、为多态性的使用提供前提

二、继承性的格式:class a extends b{}

a:子类

b:父类

体现一旦子类a继承了父类b,则子类a就获取了父类b中的声明结构的所有属性、方法

特别的:当父类中声明为private的属性和方法以后,子类仍然继承这个属性和方法,但由于封装性的影响不能直接调用这个属性和方法

子类继承父类以后除了父类的属性方法还可以自己定义属性和方法:实现功能扩展

三Java中关于继承的规定

1一个父类可以被多个子类继承

2Java中的单继承性:一个子类只能继承一个父类

3 子类与父类是一个相对的概念

4子类直接继承的父类叫直接父类。间接继承父类叫间接父类

5子类继承父类以后就获得了直接父类以及间接父类中声明的属性和方法

四、1如果我们没有显示声明一个类的父类的话,则此类就继承与java.lang.object类

2所有的类(除了java.lang.object类以外)都直接或间接的继承于java.lang.object类

3所有Java类都具有java.lang.object类声明的属性和方法

练习圆与圆柱

package text1;
//父类
public class Circle {double radius;
    public Circle(){
        this.radius=1;
    }
    public void setRadius(double radius){
        this.radius=radius;
    }
public double findArea(){
 return Math.PI*radius*radius;
}
}

//子类继承父类

public class Cylinder extends Circle {double length;
    public Cylinder(double length){
        this.length=length;
    }
    public void setLength(double length){
        this.length=length;
    }
    public double getLength(){
        return  length;
    }
    public double findvoid(){
        return findArea()*length;
    }
}
测试类
public class text {
    public static void main(String[] args) {
        Cylinder d=new Cylinder(1);
        d.setLength(3.4);
        d.setRadius(2.1);
     double a=d.findvoid();

        double b=d.findArea();
        System.out.println("圆的面积为:"+b);
        System.out.println("圆柱的体积为:"+a);
    }

}
结果

圆的面积为:13.854423602330987
圆柱的体积为:47.10504024792536
 

方法重写

重写:子类继承父类以后,在子类写上和父类同名同参的方法覆盖父类(在调用时调用子类重写的方法)

约定俗称:子类中的方法就叫重写方法,父类中的那个被覆盖的方法叫做被重写方法

1子类重写的方法名、形参列表和父类被重写的方法名、形参列表相同

2子类重写的方法权限修饰符不小于父类被重写的方法权限修饰符

>特殊情况:子类不能重写父类中权限修饰符为private的方法

3返回值类型:

>当父类被重写的方法返回值是void是,那么重写的方法返回值类型也为void

>当父类被重写的返回值类型为a类型(是具体类型时例:object),那么子类重写的返回值类型可以是a类型或a类的子类

>当父类被重写的返回值类型为基本数据类型,那么子类重写方法的返回值类型必须是相同的基本数据类型

4子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型

子类和父类中的同名同参的方法声明要么都是非static的(考虑重写),要么都是static的(不可重写)

练习:圆与圆柱的表面积

//父类

public class Circle {double radius;
    public Circle(){
        this.radius=1;
    }
    public void setRadius(double radius){
        this.radius=radius;
    }
public double findArea(){
 return Math.PI*radius*radius;
}
}

//子类继承父类

public class Cylinder extends Circle {double length;
    public Cylinder(double length){
        this.length=length;
    }
    public void setLength(double length){
        this.length=length;
    }
    public double getLength(){
        return  length;
    }
//    public double findvoid(){
//        return findArea()*length;
//    }

    @Override
    public double findArea() {
        return Math.PI*radius*radius*2+2*Math.PI*radius*length;
    }
}

测试类

public class text {
    public static void main(String[] args) {
        Cylinder d=new Cylinder(1);
        d.setLength(3.4);
        d.setRadius(2.1);
//     double a=d.findvoid();

        double b=d.findArea();
        System.out.println("圆柱的表面积为:"+b);

    }

}

结果

圆柱的表面积为:72.57079029792422
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值