面向对象的第二篇文章。
方法的重写:子类继承父类,并且可以继承到某个方法,那么子类就能够重写这个方法,重写是指子类定义的一个方法和父类的方法的方法名字,形参列表,形参个数,返回值完全一致。
例:
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("我是子类的一个方法。");
}
}
打印输出:
至于多态到底有什么用,下一篇博客写一个小例子来说明吧。