• No2_2.接口继承多态_Java学习笔记_继承


    ***类的继承***
    1.继承的实现extends
    2.[修饰符] class 子类名 extends 父类名{}
    3.修饰符一般为:public abstract final
    4.重写是指父子类之间的关系,子类的方法名与父类的方法名相,那么子类就不能继承父类的方法,称子类的方法重写了父类的方法。
    5.重写体现了子类补充或者改变父类方法的能力。通过重写,可以使一个方法在不同的子类中表现出不同的行为;
    6.重写民可以称为覆盖;


    ***使用super关键字***
    1.子类可以继承父类的非私有成员变量和成员方法(非private)作为自己的成员变量和方法;
    2.如果子类与父类成员变量同名,子类不能继承父类的成员变量,称:子类的成员变量隐藏了父类的成员变量;
    3.如2.换成方法,称:子类成员方法重写了父类的成员方法;
    4.这时,想在子类中访问父类中被隐藏的成员方法或变量,就可以用super;
    5.两种用途:
    a.调用父类的构造方法;子类可以调用由父类声明的构造方法,必须使用super调用;【必须写在构造方法体中吗???是的】
    super([参数列表]);
    应该为构造函数中的第一条语句;

    b.操作被隐藏的成员变量和被重写的成员方法;
    super.成员变量名
    super.成员方法名([参数列表])

    问题:super. 可以不在构造方法中使用吗,可以。但应该是写在方法体中的

      1 import java.util.Date;
      2 import java.util.Locale;
      3 
      4 
      5 /**
      6  * @author: liu_y
      7  * @Date: 2016年7月3日
      8  * @Title:继承、继承中的重写
      9  */
     10     /********** 继承的实现 **************/
     11     
     12     class Bird {
     13         String color = "white";
     14         String skin = "羽毛";
     15     }
     16     
     17     class Pigeon extends Bird {
     18         public void pColor() {
     19             Pigeon p = new Pigeon();
     20             System.out.println("鸽子继承的鸟类的属性,颜色是:" + p.color);
     21         }
     22     }
     23     
     24     /********** 继承中的重写 **************/
     25     class Animal {
     26         public Animal() {
     27         }
     28     
     29         public void cry() {
     30             System.out.println("动物发出叫声!");
     31         }
     32     }
     33     
     34     class Dog extends Animal {
     35         public Dog() {
     36         }
     37     
     38         public void cry() {
     39             System.out.println("狗发出“汪汪汪”的叫声!");
     40         }
     41     }
     42     
     43     class Cat extends Animal {
     44         public Cat() {
     45         }
     46     
     47         public void cry() {
     48             System.out.println("罗小黑发出“喵喵喵”的叫声!");
     49         }
     50     }
     51     
     52     class Sheep extends Animal {
     53     
     54     }
     55     
     56     /********** 使用super关键字 **************/
     57     class Beast {
     58         String skin;
     59         int age=77;    //父类成员变量,赋值是77
     60         public Beast() {
     61             
     62         }
     63     
     64         public Beast(String skin) {
     65             this.skin = skin;
     66             this.age=55; //调用父类的构造方法后,赋值为55。不调用就77
     67         }
     68     
     69         public void move() {
     70             System.out.println("跑");
     71         }
     72     
     73         public String getSkin() {
     74             return skin;
     75         }
     76     }
     77     
     78     class Tiger extends Beast {
     79         private int age;
     80     
     81         public Tiger() {
     82             super("条纹"); //调用父类的构造方法,一定要放在方法的首个语句!!
     83             age = 33;
     84             super.age = 88; // 在子类中修改父类Beast的成员变量的值
     85             super.move(); // 在子类中调用父类Beast的成员方法(需要写在方法体中,不一定构造方法)
     86         }
     87         
     88         public int getSuperAge() {
     89             return super.age;
     90         }    
     91         public int getAge(){
     92             return age;
     93         }
     94     }
     95     
     96     /********** 范例:经理与员工的差异 **************/
     97     class Employee{
     98         private String name;
     99         private int age;
    100         private Date birthday;
    101         private double salary;
    102         public void setName(String name){
    103             this.name=name;
    104         }
    105         public String getName(){
    106             return name;
    107         }
    108         public void setAge(int age){
    109             this.age=age;
    110         }
    111         public int getAge(){
    112             return age;
    113         }
    114         public void setBirthday(Date birthday){
    115             this.birthday=birthday;            
    116         }
    117         public Date getBirthday(){
    118             return birthday;
    119         }
    120         public void setSalary(double salary){
    121             this.salary=salary;
    122         }
    123         public double getSalary(){
    124             return salary;
    125         }        
    126         
    127         public String getInfo(){
    128             return "我是父类:我是jm的员工~~";
    129         }
    130     }
    131     
    132     class Manager extends Employee{
    133         private double bonus;        //经理有奖金的哟
    134         public void setBonus(double bonus){
    135             this.bonus=bonus;            
    136         }
    137         public double getBonus(){
    138             return bonus;
    139         }
    140         
    141         @Override        //重写getInfo()
    142         public String getInfo(){
    143             return "我是子类:我是jm的工程师~~";
    144         }
    145 
    146     }
    147     
    148 
    149 public class Hello2Extends {
    150 
    151     public static void main(String[] args) {
    152         // TODO Auto-generated method stub
    153         //继承的实现
    154         System.out.println("继承的实现:");
    155         Pigeon p=new Pigeon();
    156         p.pColor();
    157 
    158         //继承中的重写
    159         System.out.println("
    继承中的重写");
    160         Dog dog=new Dog();
    161         Cat cat=new Cat();
    162         Sheep sheep=new Sheep();
    163         System.out.println("执行dog.cry()时的输出结果:");
    164         dog.cry();
    165         System.out.println("执行cat.cry()时的输出结果:");
    166         cat.cry();
    167         System.out.println("执行sheep.cry()时的输出结果:");
    168         sheep.cry();
    169         
    170         //使用super关键字
    171         System.out.println("
    使用super关键字");
    172         Tiger tiger=new Tiger();
    173         System.out.println("老虎的皮肤是:"+tiger.getSkin()+";父类年龄是:"+tiger.getSuperAge());
    174         System.out.println("老虎的皮肤是:"+tiger.getSkin()+";父类年龄是:"+tiger.getAge());
    175         
    176         
    177         //    范例:经理与员工的差异
    178         Employee employee=new Employee();
    179         employee.setName("Sunshine");
    180         employee.setAge(28);
    181         employee.setBirthday(new Date());
    182         employee.setSalary(3000);
    183         
    184         Manager manager=new Manager();
    185         manager.setAge(30);
    186         manager.setName("Liuliu");
    187         manager.setBirthday(new Date());
    188         manager.setSalary(5000);
    189         manager.setBonus(2577.88);
    190         System.out.println("员工的个人信息:"+employee.getName()+" "+String.format(Locale.CHINA,"%tF",new Date())
    191         +" "+employee.getSalary());
    192         System.out.println("经理的个人信息:"+manager.getName()+" "+manager.getAge()+" "+manager.getSalary()+" "+manager.getBonus());
    193                 
    194         
    195         //范例 重写父类中的方法
    196         System.out.println("
    重写父类中的方法");
    197         System.out.println(employee.getInfo());
    198         System.out.println(manager.getInfo());
    199     }
    200 }

    输出结果:

     1 继承的实现:
     2 鸽子继承的鸟类的属性,颜色是:white
     3 
     4 继承中的重写
     5 执行dog.cry()时的输出结果:
     6 狗发出“汪汪汪”的叫声!
     7 执行cat.cry()时的输出结果:
     8 罗小黑发出“喵喵喵”的叫声!
     9 执行sheep.cry()时的输出结果:
    10 动物发出叫声!
    11 
    12 使用super关键字
    13 14 老虎的皮肤是:条纹;父类年龄是:88
    15 老虎的皮肤是:条纹;父类年龄是:33
    16 员工的个人信息:Sunshine 2016-07-04 3000.0
    17 经理的个人信息:Liuliu 30 5000.0 2577.88
    18 
    19 重写父类中的方法
    20 我是父类:我是jm的员工~~
    21 我是子类:我是jm的工程师~~
  • 相关阅读:
    Delphi的属性Property
    Delphi数组
    Delphi中record和packed record的区别
    Delphi基本数据类型---枚举、子界、集合、数组
    Delphi的枚举类型
    Java创建线程的细节分析
    java concurrency: ThreadLocal及其实现机制
    java concurrency: daemon线程
    java volatile关键字的理解
    Java动态代理
  • 原文地址:https://www.cnblogs.com/sunshine-habit/p/5639879.html
Copyright © 2020-2023  润新知