有很多人觉得多态这个概念比较难理解,不像继承就是子类继承父类之后可以使用父类中没有被private修饰的成员变量和成员方法,为什么可以使用父类的成员方法和成员变量呢。
为什么子类对象可以调用父类的成员变量和方法
通过上一篇,我们知道Java在创建类之后,如果你的构造方法中没有写任何东西,他就会默认的加一个super();用来调用父类的构造方法,一直调用到Object类的构造方法(Object类是所有类的父类)
public class father{
public int money=1000;
father(){
//super(); 默认会调用super();也就是Object类的构造方法
}
public void run(){
//somethings
}
}
class son extends father{
son(){
//super()
}
}
多态
很多人对多态感觉无法理解,其实很简单,就是很多种状态,不同的形态就叫多态,当然这是我自己的理解
方法的重写和重载
方法的重写和重载都是实现多态的方式
方法重写是运行时的多态,方法重载是编译时的多态
重载发生在一个类中,同名的方法又不同的参数列表(参数类型不同,参数个数不同或者都不同)
重写发生在子类和父类之间,重写方法
底下演示的使方法重载
重写:重写就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容之外,还将方法的修饰权限符改为pubilc
重构:子类与父类的成员方法返回值,方法名称、参数类型以及个数完全相同,唯一不同的是实现内容
重载:参数类型和个数不同
public class OverLoadText {
public OverLoadText(){}
public static int add(int a,int b){
return a+b;
}
public static int add(int a){
return a;
}
public static double add(double a,double b){
return a+b;
}
public static int add(int a,double b){
return (int) (a+b);
}
public static int add(int ...a){
int s = 0;
for (int i = 0; i < a.length; i++) {
s += a[i];
}
return s;
}
public static void main(String args[]){
System.out.println(add(1));
System.out.println(add(1,2,3,4,5));
System.out.println(add(2,2));
System.out.println(add(0.11,0.22));
System.out.println(add(1,0.2));
thisText thisText = new thisText();
}
}
方法的重写就是子类bioa对父类的成员方法进行重写 需要注意的使要有@Override标识
public class father{
father(){
//super(); 默认会调用super();也就是Object类的构造方法
}
public void run(){
System.out.println("父亲跑");
}
}
class son extends father{
son(){
//super()
}
@Override
public void run(){
System.out.println("儿子跑");
}
}
@Override
下一篇会分享内部类的知识