对于java,大家应该熟悉的不能再熟悉了。每天都在用,每天都在写,那么你是否对java基础有足够的了解呢?有的人说能写出代码,完成功能就够了,还了解那些基础知识干嘛呢?都是所谓的纸上谈兵。但是基础才是你建筑高楼大厦的根本,有没有哪一刻思考过java的一些特性(比如继承多态反射)之所以这么设计的原因呢?今天就来一起来回顾下java的基础知识:
java三大特性,也是面向对象的「三大特性」:封装,继承,多态
java还可以加上抽象、接口两大特性。
拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承。继承,接口,方法的重载重写。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息❝程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言 ❞
注解框架,插件化,Hook技术,用到的地方太多了。
Class<User> c = User.class;
User u = c.newInstance();
首先,父类的静态属性和方法是可以被子类继承的,见代码:
public class One {
public static String one_1 = "one";
public static void oneFn() {
System.out.println("oneFn");
}
}
public class Two extends One{
}
public class MyTest {
public static void main(String[] args) {
One one = new Two();
one.oneFn();
String one_1 = One.one_1;
System.out.println("One.one_1>>>>>>>"+one_1);
String one_12 = one.one_1;
System.out.println("one.one_1>>>>>>>"+one_12);
}
}
但是,是不能被子类重写的,因为调用的还是父类的方法和变量。
原因如下:
继承和重写就可以实现父类的引用指向不同子类的对象。重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。非静态方法可以被继承和重写,因此可以实现多态。