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("\n继承中的重写");
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("\n使用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("\n重写父类中的方法");
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的工程师~~

 

posted @ 2016-07-04 11:17  sunshine-habit  阅读(154)  评论(0编辑  收藏  举报