1、父类中staitic修饰的静态方法,不能覆盖、不能继承。
2、父类中staitic修饰的变量或常量,能覆盖、不能继承。
static修饰的变量和方法,只属于类本身,不属于对象;当声明一个对象时,并不产生static变量和方法的拷贝。也就是说,用static修饰的变量和方法在类加载的时候,会分配一块存储空间,所有此类的对象都可以操控此块存储空间;
注意:当子类没有与父类同名的static变量(或方法时),子类的对象也可操控这块内存空间。但是,子类并没有继承父类中static修饰的变量和方法。这是因为static修饰的变量和方法是属于父类本身的。
3、父类中final修饰的方法,不能覆盖,但可继承。
代码示例:
package com.jdk;
/**
* Created by Liuxd on 2018-11-02.
*/
public class TestExtendsClass {
public static void main(String[] args) {
ParentClass parentClass = new ChildClass();
System.out.println();
int pFResult = ParentClass.plus(3,2);
int pResult = ParentClass.add(3,2);
int cResult = ChildClass.add(3,2);
int pMResult = parentClass.minus(2,3);
System.out.println("父类静final方法计算结果:" + pFResult);
System.out.println("父类静方法计算结果:" + pResult);
System.out.println("子类静方法计算结果:" + cResult);
System.out.println("父类final方法计算结果:" + pMResult);
System.out.println("父类静态变量num:" + ParentClass.num);
System.out.println("子类静态变量num:" + ChildClass.num);
}
}
class ParentClass {
public static final int num = 1;
ParentClass() {
System.out.println("执行父类无参数构造方法");
}
static int add(int i, int j) {
return i + j;
}
static final int plus(int i, int j) {
return i + j;
}
final int minus(int i, int j) {
return i - j;
}
}
class ChildClass extends ParentClass {
public static final int num = 2;
ChildClass() {
System.out.println("执行子类无参数构造方法");
}
// @Override 无法继承,编译时出错
static int add(int i, int j) {
return i * j;
}
// 无法继承,编译时出错
// int plus(int i, int j) {
// return i + j;
// }
// 无法继承,编译时出错
// int minus(int i, int j) {
// return i - j;
// }
}
输出结果:
执行父类无参数构造方法
执行子类无参数构造方法父类静final方法计算结果:5
父类静方法计算结果:5
子类静方法计算结果:6
父类final方法计算结果:-1
父类静态变量num:1
子类静态变量num:2