Java基础知识三问—百度真题

时间:2022-07-27
本文章向大家介绍Java基础知识三问—百度真题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

对于java,大家应该熟悉的不能再熟悉了。每天都在用,每天都在写,那么你是否对java基础有足够的了解呢?有的人说能写出代码,完成功能就够了,还了解那些基础知识干嘛呢?都是所谓的纸上谈兵。但是基础才是你建筑高楼大厦的根本,有没有哪一刻思考过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);
 }
}

但是,是不能被子类重写的,因为调用的还是父类的方法和变量。

原因如下:

  • 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。
  • 多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键)。有了继承和重写就可以实现父类的引用指向不同子类的对象。重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。
  • 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。非静态方法可以被继承和重写,因此可以实现多态。