zoukankan      html  css  js  c++  java
  • 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的工程师~~
  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/sunshine-habit/p/5639879.html
Copyright © 2011-2022 走看看