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);
}
}
但是,是不能被子类重写的,因为调用的还是父类的方法和变量。
原因如下:
- 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。
- 多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键)。有了
继承和重写
就可以实现父类的引用指向不同子类的对象。重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。 - 静态属性、静态方法和非静态的属性都可以被继承和隐藏而
不能被重写
,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。非静态方法可以被继承和重写,因此可以实现多态。
- 51nod1004 n^n的末位数字
- Leetcode-Easy 20. Valid Parentheses
- Leetcode-Easy 234. Palindrome Linked List
- 为什么是link-visited-hover-active
- 51Nod 1051 最大子矩阵和
- Javascript之创建对象
- Leetcode-Easy 136. Single Number
- 2017.10.25水题大作战题解
- Angular开发实践(四):组件之间的交互
- Leetcode-Easy 70. Climbing Stairs
- Angular开发实践(八): 使用ng-content进行组件内容投射
- Angular开发实践(六):服务端渲染
- Leetcode-Easy 657. Judge Route Circle
- 洛谷P1138 第k小整数
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 浙大版《C语言程序设计(第3版)》题目集 习题8-1 拆分实数的整数与小数部分
- 如何在 Linux 上恢复误删除的文件或目录
- 浙大版《C语言程序设计(第3版)》题目集 习题8-2 在数组中查找指定元素
- Pandas学习笔记之时间序列总结
- HTML+JS动态获取当前时间
- HTML+JS实现时钟
- SQL-spj库创建脚本
- Sublime Text3 通过Package Control安装插件时找不到可用安装包的解决方法
- SwiftUI:手动发布 ObservableObject 更改
- 卧槽,又一款 Markdown 组合神器!!!
- SQL-查询各工程项目使用所提供零件最多的供应商
- 浙大版《C语言程序设计(第3版)》题目集 习题8-3 数组循环右移
- SwiftUI:控制图像插值
- SQL-查询比p6零件供应数量都高的零件
- 浙大版《C语言程序设计(第3版)》题目集 习题8-5 使用函数实现字符串部分复制