关于一些基础的Java问题的解答(四)
16. Java面向对象的三个特征与含义
- 封装:把过程和数据包围起来,对数据的访问只能通过已定义的界面,主要是方便类的修改
- 继承:对象的一个新类可以从现有的类中派生,这个过程称为类继承。通常继承把共性放到父类,特性放到子类。继承性很好的解决了软件的可重用性问题
- 多态:指允许不同类的对象对同一消息作出响应,多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题
17. Override和Overload的含义和区别
- Override描述子类与父类方法的关系,Overload描述同一个类中方法的关系
- Override的方法必须完全相同,权限不少于父类,Overload方法名必须相同,参数必须不同,返回值可同可不同
18. Interface与abstract类的区别
- 接口的变量为public static final的编译期常量,抽象类的变量没有限制
- 接口中的方法为public abstract的公开抽象方法,抽象类的抽象方法不为private即可,且允许有一般方法
- 一个类可以实现多个接口,一个类最多只能继承一个抽象类
19. Static class 与non static class的区别
- 静态内部类不需要持有指向外部类的引用,但非静态内部类需要持有对外部类的引用
- 静态内部类不能访问外部类的非静态成员,只能访问外部类的静态成员,而非静态内部类可以访问外部类所有成员
- 静态内部类与非静态内部类创建方法不同,一个非静态内部类不能脱离外部类实体被创建
- public class Test {
- public static void main(String[] args) {
- // 创建静态内部类
- Test.staticClass class1 = new Test.staticClass();
- // 创建非静态内部类
- // 不能同编译!
- // Test.noStaticClass class2 = new Test.noStaticClass();
- // 正确创建非静态内部类方法
- Test.noStaticClass class2 = new Test().new noStaticClass();
- }
- static class staticClass {};
- class noStaticClass {};
- }
20. java多态的实现原理
- 绑定:指的是将一个方法调用和一个方法主体关联起来的过程
- 前期绑定:在程序执行前进行绑定(一般由编译器和连接程序实现,C++默认为前期绑定)
- 后期绑定:也叫作动态绑定或运行时绑定,在程序运行时通过识别对象的类型,从而调用恰当的方法(Java除static和final方法外,其他均为后期绑定。C++通过virtual关键字实现虚函数,从而实现后期绑定)
- public class Test {
- static class A {
- public void sayHi() {
- System.out.println("Hi, I am A");
- }
- }
- static class B extends A {
- @Override
- public void sayHi() {
- System.out.println("Hi, I am B");
- }
- }
- static class C extends A {
- @Override
- public void sayHi() {
- System.out.println("Hi, I am C");
- }
- }
- public static void saySomething(A a) {
- a.sayHi();
- }
- public static void main(String[] args) {
- saySomething(new A());
- saySomething(new B());
- saySomething(new C());
- }
- }
看到第23行的方法,从编译器给出的信息我们只能知道a是一个A类的引用,但无法确定a是A类的实例,还是其子类(B或C)的实例(导出类可以通过向上转型,把对自身的引用视为对其基类的引用),因此如果通过前期绑定,我们并不能实现多态。但是如果我们使用的是后期绑定,我们就可以在程序运行时先确定传入实例的具体类型,再根据其具体类型来调用对应的方法,就可以实现多态。
关于一些基础的Java问题的解答(四)的更多相关文章
- 关于一些基础的Java问题的解答(一)
学习一门语言基础是非常重要的,因此本文总结了一些常见的Java基础问题的解答,希望可以帮到大家. 1. 九种基本数据类型的大小,以及他们的封装类. 9种基本数据类型 基本类型 包装类型 大小 bool ...
- 关于一些基础的Java问题的解答(七)
31. 反射的作用与原理 简单的来说,反射机制其实就是指程序在运行的时候能够获取自身的信息.如果知道一个类的名称或者它的一个实例对象, 就能把这个类的所有方法和变量的信息(方法名,变量名,方法,修饰符 ...
- 关于一些基础的Java问题的解答(六)
26. ThreadPool用法与优势 ThreadPool即线程池,它是JDK1.5引入的Concurrent包中用于处理并发编程的工具.使用线程池有如下好处: 降低资源消耗:通过重复利用已创建的线 ...
- 关于一些基础的Java问题的解答(五)
21. 实现多线程的两种方法:Thread与Runable 在Java中实现多线程编程有以下几个方法: 1.继承Thread类,重写run方法 public class Test { public s ...
- 关于一些基础的Java问题的解答(三)
11. HashMap和ConcurrentHashMap的区别 从JDK1.2起,就有了HashMap,正如上一个问题所提到的,HashMap与HashTable不同,不是线程安全的,因此多线程 ...
- 关于一些基础的Java问题的解答(二)
6. Hashcode的作用 官方对于hashCode的解释如下: Whenever it is invoked on the same object more than once during an ...
- 20145213 《Java程序设计》实验四 Android开发基础
20145213 <Java程序设计>实验四 Android开发基础 说在前面的话 不同以往实验,对于这次实验具体内容我是比较茫然的.因为点我,打开实验四的链接居然能飘出一股熟悉的味道,这 ...
- 20145225《Java程序设计》 实验四 Android开发基础
20145225<Java程序设计> 实验四 Android开发基础 实验报告 实验内容 安装Android Studio 运行安卓AVD模拟器 使用安卓运行出虚拟手机并显示HelloWo ...
- 黑马程序员:Java基础总结----java注解
黑马程序员:Java基础总结 java注解 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! java注解 lang包中的基本注解 @SuppressWarnings ...
随机推荐
- Angular组件——父组件调用子组件方法
viewChild装饰器. 父组件的模版和控制器里调用子组件的API. 1.创建一个子组件child1里面只有一个greeting方法供父组件调用. import { Component, OnIni ...
- java中数组、list、泛型集合的长度
1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. 2 java中的length()方法是针对字符串String说的,如果想看这 ...
- python当中的生成器
最近身边的朋友都在问我迭代器是什么回事,经常跟大家一起讨论python的迭代器,一点点的我觉着自己有了更深一层的理解.我写下这篇文章,希望能对懵懵懂懂的好伙伴有些帮助~ 我也不是什么能人,难免说错一些 ...
- POJ2318【判断点在直线哪一侧+二分查找区间】
题目大意:给定一个矩形和一些线段,线段将矩形分割为从左至右的若干部分,之后给出一些玩具的坐标,求每个部分中玩具的数量 #include<cstdio> #include<cstdli ...
- Java基础中一些容易被忽视的语法小细节总结
一:语法细节 1. Java中的命名规则: package:统一使用小写字母 class:首字母大写,使用驼峰标识 method:首字母小写,使用驼峰标识 field:首字母小写,使用驼峰标识 sta ...
- QT 实现在QLabel上画图
QT之所以不能再任意控件上绘图是因为QT的事件过滤器把控件的绘图事件给过滤了. 在paintevent()函数中,通常需要设置QPainter对象,创建QPainter对象的同时需要指定绘图设备,即继 ...
- POJ-1861 Network---最小生成树
题目链接: https://vjudge.net/problem/POJ-1861 题目大意: 有一些公司,公司之间需要连接起来.给出了哪些公司可以连接以及连接边的长度.求最小生成树中最大的边,以及最 ...
- requests-证书验证
import requests #response = requests.get('https://www.12306.cn') #print(response.status_code) #以上会显示 ...
- 使用vue-cli快速搭建大型单页面应用开发环境
工作环境:terminal,已经全局安装了vue(可使用npm install -g vue) 全局安装vue-cli npm install -g vue-cli 创建一个基于webpack模板的项 ...
- AXIOS源代码重点难点分析
摘要 vue使用axios进行http通讯,类似jquery/ajax的作用,类似angular http的作用,axios功能强大,使用方便,是一个优秀的http软件,本文旨在分享axios源代码重 ...