zoukankan      html  css  js  c++  java
  • Java 类设计----Java类的继承

    Java类的继承


    为描述和处理个人信息,定义类Person:
    public class Person {
      public String name;
      public inat age;
      public Date birthDate;

      public String getInfo()
      {...}
    }
    为描述和处理学生信息,定义类Student:
    public class Student {
      public String name;
      public int age;
      public Date birthDate;
      public String school;

      public String getInfo()
      {...}
    }
    通过继承,简化Student类的定义:
    public class Person {
      public String name;
      public int age;
      public Date birthDate;
      public String getInfo() {...}
    }

    public class Student extends Person{
      public String school;
    }
    Student类继承了父类Person的所有属性和方法,并增加了一个属性school。Person中的属性和方法,Student都可以利用。
    类继承语法规则:

      < 修饰符> class < 子类名称> [extends < 父类>]
      {
        <属性和方法的声明>
      }
    Java只支持单继承,不允许多重继承
    一个子类只能有一个父类,一个父类可以派生出多个子类
    子类继承了父类,就继承了父类的方法和属性。
    在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。

    在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。

    关于继承的规则:
      子类不能继承父类中私有的(private)的成员变量和方法

    例子:

    public class Person {
        public String name;
        public int age;
        public Date birth;
        public String getInfo(){
            return "name: " + name + ", " + "age: " + age + ", " + "birth: " + birth;
        }
    }
    public class Student extends Person{
        
        public String school;
    
            public void print() {
                //System.out.println(this.lover);
        }
    }
    public class TestPerson {
        public static void main(String[] args) {
    
            Student student = new Student();
            student.name = "Jerry";
            student.birth = new Date();
            student.age = 1;
            student.school = "atguigu";
            
    //        student.lover = "";
            
            System.out.println(student.getInfo()); 
            
            Person person = new Person();
        
            person.age = 1;
            person.birth = new Date();
            person.name = "Tom";
            
            System.out.println(person.getInfo()); 
        }
    }

    练习
    1、(1)定义一个ManKind类,包括
      成员变量 int sexint salary
      方法 void manOrWorman():根据sex的值显示“man”(sex==1)或者“women”(sex==0);
      方法 void employeed():根据salary的值显示“no job”(salary==0)或者“ job”(salary!=0)。

     1 /**
     2  * 定义一个ManKind类,包括
     3  * 成员变量 int sex 和 int salary;
     4  * 方法 void manOrWorman():根据sex的值显示“man”(sex==1)或者“women”(sex==0);
     5  * 方法 void employeed():根据salary的值显示“no job”(salary==0)或者“ job”(salary!=0)。
     6  */
     7 public class ManKind {
     8 
     9     int sex;
    10     int salary;
    11     
    12     public void manOrWoman() {
    13         if(sex == 0){
    14             System.out.println("woman");
    15         }else if(sex == 1){
    16             System.out.println("man");
    17         }
    18     }
    19     
    20     public void employeed() {
    21         if(salary != 0){
    22             System.out.println("job");
    23         }else{ 
    24             System.out.println("no job");
    25         }
    26     }
    27 }


    (2)定义类Kids1继承ManKind,并包括
      成员变量 int yearsOld;
      方法 printAge() 打印 yearsOld 的值。

    (3)在Kids1类的main方法中实例化Kids1的对象 someKid,用该对象访问其父类的成员变量及方法。

     1 /**
     2  * 定义类 Kids1 继承ManKind,并包括
     3  * 成员变量 int yearsOld;
     4  * 方法 printAge() 打印 yearsOld 的值。
     5  * 
     6  * 在Kids1中重新定义employed() 方法,覆盖父类ManKind中定义的employed()方法,
     7  * 输出“Kids should study and no job.”
     8  */
     9 public class Kids1 extends ManKind{
    10 
    11     int yearsOld;
    12     
    13     void printAge(){ 
    14         System.out.println("yearsOld: " + yearsOld);
    15     }
    16     
    17     //修改练习3中定义的类Kids1中employed()方法,在该方法中调用父类ManKind的employed()方法,
    18     //然后再输出“but Kids should study and no job.”
    19     public void employeed() {
    20         super.employeed();
    21         System.out.println("Kids should study and no job.");
    22     }
    23     
    24     //在Kids1类的main方法中实例化Kids1的对象 someKid,用该对象访问其父类的成员变量及方法。
    25     public static void main(String[] args) {
    26         Kids1 someKid = new Kids1();
    27         someKid.sex = 1;
    28         someKid.salary = 5000;
    29         someKid.yearsOld = 25;
    30         
    31         someKid.manOrWoman();
    32         someKid.employeed();
    33         someKid.printAge();
    34     }
    35 }

    2、根据下图实现类。在TestCylinder类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积。

     1 public class Circle {
     2 
     3     protected double radius;
     4 
     5     public Circle(double radius) {
     6         this.radius = radius;
     7     }
     8     
     9     public double getRadius() {
    10         return radius;
    11     }
    12 
    13     public void setRadius(double radius) {
    14         this.radius = radius;
    15     }
    16     
    17     public double findArea(){
    18         return 3.14 * radius * radius;
    19     }
    20 }
     1 public class Cylinder extends Circle{
     2 
     3     private double length;
     4 
     5      public Cylinder() {
     6         this.length = 1;
     7     }       
     8 
     9     public double getLength() {
    10         return length;
    11     }
    12 
    13     public void setLength(double length) {
    14         this.length = length;
    15     }
    16     
    17     /**
    18      * 返回圆柱的体积
    19      * @return
    20      */
    21     public double findVolume(){
    22         return super.findArea() * length;
    23     }
    24     
    25     /**
    26      * 返回圆柱的表面积
    27      */
    28     @Override
    29     public double findArea() {
    30         return super.findArea() * 2 + 2 * 3.14 * radius * length;
    31     }
    32 }
     1 public class TestCylinder {
     2     public static void main(String[] args) {
     3         
     4         Cylinder cylinder = new Cylinder();
     5         
     6         cylinder.setLength(2);
     7         
     8         //返回表面积
     9         System.out.println(cylinder.findArea());
    10         //返回体积
    11         System.out.println(cylinder.findVolume());
    12     }
    13 }
  • 相关阅读:
    spoj 7001 Visible Lattice Points莫比乌斯反演
    codeforces 446C DZY Loves Fibonacci Numbers 数论+线段树成段更新
    fzu 1753 质因数的应用
    hud 4746 莫比乌斯反演
    hdu 1695 容斥原理或莫比乌斯反演
    hdu 4741 Save Labman No.004异面直线间的距离既构成最小距离的两个端点
    codeforces练习
    年底Android面试整理(附答案)
    最近Android真的凉凉了?
    Android 应用防止被二次打包指南
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7223311.html
Copyright © 2011-2022 走看看