***类的继承***
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的工程师~~