**首先关于多态的问题:
1:多态是继承父类的方法!!而不是属性 只能继承方法
**
多态的具体操作:
通过创建子类的父类对象:
package OOP;
//父类对象:
public class person {
public person() {
}
public void say()
{
System.out.println("person sayas....");
}
}
//子类对象
public class student extends person{
student() {
super();
}
public void say()
{
System.out.println("student say..");
}
}
//在main函数中调用
public class application {
public static void main(String[] args) {
student s1 = new student(); //用student实例
person s2= new student(); //创建一个person类的实例
s1.say();
s2.say();
}
}
最后的结果显示:
可以这样理解:
子类继承于父类,那么父类的所有东西 子类都可以使用,
所以实际上用new student给person赋值 其所给予给person的东西可能远远大于person类所具有的 那么通过它也可以调用子类的东西,并且student类中的say函数相当于是重写了person类里面的say函数 会实现函数覆盖这就是所谓的同名隐藏规则(与C++)类似。
总结:简而言之,多态就是通过父类的对象调用子类的函数 ,只有有继承关系的两个类能如此使用!!!!若是两个毫无关系的类是不能实现内部的转换的!
static与非static的区别:
若将上述函数改为:
public class person {
public person() {
}
public static void say() //加入static前缀
{
System.out.println("person sayas....");
}
}
public class student extends person{
student() {
super();
}
public static void say() //也加上static
{
System.out.println("student say..");
}
}
最后的结果
此时会发现第二行的输入不同
这是因为!!!!!!
static的特殊性!!!
所以若在这时写了两个相同的个方法,他会报错,只有非static才能从属于不同的类,而static是一个特殊的地方 所有的东西都放在里面,他是不允许有名字相同的两个方法出现的。
关于多态的调用,建议多写几个不同的函数创建几个不同的类来实现 会更容易理解噢!