面向对象特征之二:继承性。-重写

一、面向对象特征之一:封装性

 

二、面向对象特征之二:继承性

/*

 * 面向对象的特征二:继承性

 * 1、为什么要设计继承性?

 * 2、通过"class A extends B"类实现类的继承子类:A;父类(或基类SuperClass):B

 * 3、子类继承父类以后,父类中声明的属性与方法可以直接使用。

 * 4、父类中的私有属性和方法也会被子类获取到,但是因为权限的问题,在子类中无法访问。

 * 5、子类除了继承外,还可以再自身定义父类中没有的属性和方法。

 * 6、子类是对父类功能的扩展,明确子类不是父类的子集;

 *      子类只能单继承,即一个子类只能有一个父类。反之,一个父类可以有多个子类。

 * */

将多个类中都有的代码,封装在一个单独的类中,用到时,直接在需要用到的类中继承即可。如图:

 

  1. Person类:
package com.atguigu.java1;



public class Person {

    private String name;

    private int age;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

}

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

   

    public void eat(){

        System.out.println("吃饭");

    }

}
  1. Student类:
package com.atguigu.java1;



public class Student extends Person{

    //构造器

    public Student() {

       

    }

    public Student(String name,int age) {

        //此处不能用this.name=name;和this.age=age;因为在父类Person中,name与age属性都是私有的,在其子类中可以获取到父类的私有属性,但是在子类中因为权限原因,父类的私有属性不会被访问。必须用下列的调用函数方式来访问父类的私有属性。

        this.setName(name);            

        this.setAge(age);

    }

}
  1. Worker类:
package com.atguigu.java1;



public class Worker extends Person{





}
  1. 测试类(TestExtends):
package com.atguigu.java1;

/*

 * 面向对象的特征二:继承性

 *

 * 1、为什么要设计继承性?

 *   

 * 2、通过"class A extends B"类实现类的继承

 *   子类:A;

 *   父类(或基类SuperClass):B

 * 3、子类继承父类以后,父类中声明的属性与方法可以直接使用。

 * 4、父类中的私有属性和方法也会被子类获取到,但是因为权限的问题,在子类中无法访问。

 * 5、子类除了继承外,还可以再自身定义父类中没有的属性和方法。

 * 6、子类是对父类功能的扩展,明确子类不是父类的子集;

 *      子类只能单继承,即一个子类只能有一个父类。反之,一个父类可以有多个子类。

 * */

public class TestExtends {

    public static void main(String[] args) {

        Student s=new Student();

        s.eat();

       

        Worker w=new Worker();

        w.eat();

       

        Person p=new Person();

        p.eat();

    }

}

习题1:

1、ManKind类:

package com.atguigu.cn03;



public class ManKind {

    int sex;

    int salary;

   

    public void manOrWorman() {

        if(sex==1)

            System.out.println("man");

        if(sex==0)

            System.out.println("women");

    }

    public void employeed() {

        if(salary==0)

            System.out.println("no job");

        else

            System.out.println("job");

    }

}

2、Kids类:

package com.atguigu.cn03;



public class Kids extends ManKind{

    public static void main(String[] args) {

        Kids someKid=new Kids();



        someKid.salary=12;

        someKid.manOrWorman();

        someKid.employeed();

    }

    int yearsOld;

    public void printAge() {

        System.out.println(yearsOld);

    }

}

习题2:

1、Circle类:

package com.atguigu.cn03;



public class Circle {

    private double radius;

   

    public Circle() {

        this.radius=1;

    }



    public double getRadius() {

        return radius;

    }



    public void setRadius(double radius) {

        this.radius = radius;

    }

    //计算圆的面积

    public double findArea() {

        return Math.PI*radius*radius;

    }

}

2、Cylinder类:

package com.atguigu.cn03;



public class Cylinder extends Circle{

    private double length;

   

    public Cylinder() {

        this.length=1;

    }



    public double getLength() {

        return length;

    }



    public void setLength(double length) {

        this.length = length;

    }

   

    public double findVolume() {

//      return Math.PI*this.getRadius()*this.getRadius()*length;

        return findArea()*length;

    }

}

3、测试类(test):

package com.atguigu.cn03;



public class test {

    public static void main(String[] args) {

        Cylinder c=new Cylinder();

        double area=c.findVolume();

        System.out.println(area);

       

        c.setRadius(2.3);

        c.setLength(1.2);

        area=c.findVolume();

        System.out.println(area);

    }

}

三、重写:在子类中重写了父类的同名方法。

  1. 前提:有子类继承父类
  2. 子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写、覆盖、覆写。
  3. 重写规则:1)、要求子类的“返回值类型 方法名 (参数列表)”与父类的方法一致。

2)、子类方法的修饰符不能小于父类的修饰符。

//3)、若父类方法抛异常,那么子类方法的异常类型不能大于父类的。

//4)、子父类的方法必须同为static或非static的。

重写例题:

解答:省略;

 

接口:一个类已经继承了一个父类,但是还想继承一个另外的很好的功能,我们可以把那个好的功能定义成接口,从而让类实现接口。

 

猜你喜欢

转载自blog.csdn.net/qq_39044046/article/details/93472402
今日推荐