今天看了几个题目,感觉基础比较扎实了,但是结果…话不多说记录一下.
一: 静态方法可以被重写吗?
静态的⽅法可以被继承,但是不能重写。如果⽗类中有⼀个静态的⽅法,⼦类也有⼀个完全一样的方法,那么该⼦类的⽅法会把⽗类的⽅法隐藏,⽽不是重写。通俗的讲就是⽗类的⽅法和⼦类的⽅法是两个没有关系的⽅法,具体调⽤哪⼀个⽅法是看是哪个对象的引⽤;这种⽗⼦类⽅法也不在存在多态的性质。《Java编程思想》中这样提到“只有普通的方法调用可以是多态的”。
public class BeanInfoTest {
public static void main(String[] args) {
Father son = new Son();
son.say();
}
}
class Father{
public static void say(){
System.out.println("I am father");
}
}
class Son extends Father{
public static void say(){
System.out.println("you are son");
}
}
上面的执行结果是"I am father",也就是Father类型的引用调用的.
二: 抽象的(abstract)方法是否可同时是静态的(static)?
不能,抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
补充:
接口中方法是 public abstract
接口中变量是 public static final
抽象类中可以定义构造器,接口不能;
在jdk1.8中,接口里可以有静态方法和default方法,接口中这两种方法必须要有body, ----------------但此时方法修饰符 默认public abstract + static 和上面的问题二冲突了