面向对象的第二篇文章。
方法的重写:子类继承父类,并且可以继承到某个方法,那么子类就能够重写这个方法,重写是指子类定义的一个方法和父类的方法的方法名字,形参列表,形参个数,返回值完全一致。
例:
package javaTest; public class TestDemo { public static void main(String[] args) { Son son = new Son();// 实例化对象 son.show(); } } class Father { private int age; private String name; Father() { // 默认的构造方法 } public void show() { System.out.println("名字:" + name + ", 年龄:" + age); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Son extends Father {// 子类 public Son() { } public void show() { System.out.println("我是子类++++++++"); } }打印结果:
我是子类++++++++
Super关键字:利用"super.xx"调用父类的方法(被子类隐藏的方法和普通的方法。非私有方法)。
例:
package javaTest; public class TestDemo { public static void main(String[] args) { Son father = new Son(20, "晓宁");// 实例化对象 } } class Father { private int age; private String name; /** Father() { // 默认的构造方法 } */ public Father(int age, String name) {// 传参的构造方法 this.age = age; this.name = name; System.out.println("带参数的构造方法"); } public void show() { System.out.println("名字:" + name + ", 年龄:" + age); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Son extends Father {//子类 public Son(int age, String name) { super(age, name);//父类带参数的构造方法。默认调用父类不带参数的构造方法 show();//调用子类的show()方法 super.show();//调用父类的show() } public void show(){ System.out.println("我是子类++++++++"); } } 打印结果:
继承和多态的例子:
package javaTest; public class TestDemo { public static void main(String[] args) { Father son = new Son(20, "晓宁", '男');// 父类引用指向子类对象,此时为向上转型,子类对象拥有父类的方法和属性,不具有子类的属性和方法 son.showFather();// 调用父类的方法 son.show();// 调用重写的方法 // son.showSon();//报错 Son s = (Son) son;// 向下转型 此时才拥有子类的属性和方法, s.showSon(); } } class Father { private int age; private String name; public void show() { System.out.println("我是父类++++++++"); } public void showFather() { System.out.println("我是父类中的一个方法。"); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Son extends Father {// 子类 拥有父类的属性和方法(非私有,非构造方法) private char gender; public Son(int age, String name, char gender) { super(); this.setAge(age); this.setName(name); this.setGender(gender); } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } public void show() {// 重写了父类的show()方法, System.out.println("名字:" + this.getName() + ", 年龄:" + this.getAge() + ", 性别是" + this.getGender()); } public void showSon() { System.out.println("我是子类的一个方法。"); } } 打印输出:
至于多态到底有什么用,下一篇博客写一个小例子来说明吧。