临时中转区

1 什么是单一继承?继承是否具有传递性?
父类可以拥有多个子类,子类只能有一个父类。
是。

2 方法的重写发生在哪里?
父子类中。

3 如何判断重写调用的方法是在父类抑或是子类?
无论是子类引用,亦或是父类引用,只要新建对象是子类,调用的便是子类的重写后方法。

4 子类重写父类方法后,可通过super.父类方法访问父类方法,请举应用例子
class Foo {
public void f() {
System.out.println("Foo.f()");
}
}
class Goo extends Foo {
public void f() {
super.f();
System.out.println("Goo.f()");
}
}
class Test{
public static void main(String[] args){
Foo obj2 = new Goo();
obj2.f();
}
}

5 重写的方法可以访问子类的对象吗?
可以。

6 父类引用创建的对象只能访问父类的属性方法(向上造型,或符合),而当调用的方法重写,
调用的则是子类重写后的方法

7 重写的注意事项有?

①重写的方法必须与父类方法名称相同,参数列表相同

②子类方法的返回值类型及抛出异常小于或等于父类的
子类方法的返回值类型:
父类方法为void,基本类型,子类重写方法返回值也必须相同
父类方法返回值为引用类型时,子类必须小于等于父类的
例子
Coo c
Doo d
Unit04: 继承的意义(下) 、 访问控制 、 static和final
14349

8 重写与重载的区别有哪些?
重写
①发上在父子类中,方法名称相同,参数列表相同,方法体不同
②遵循运行期,看对象调用方法。

重载
①发生在一个类中,方法名称相同,参数列表不同,方法体不同
②遵循编译期,看引用调用方法。
例子补充

8 分析如上代码,输出结果为?

class Super {
public void f() {
System.out.println ("super.f()");
}
}

class Sub extends Super {
public void f() {
System.out.println ("sub.f()");
}
}

class Goo {
public void g(Super obj) {
System.out.println ("g(Super)");
obj.f();
}
public void g(Sub obj) {
System.out.println ("g(Sub) ");
obj.f();
}
}

class Test{
public static void main(String[] args){
Super obj = new Sub();
Goo goo = new Goo();
goo.g(obj);
}
}
分析过程:
关键代码在于goo.g(obj),

Goo型对象goo调用了g方法传入super型对象obj,
由于obj对象类型为super,于是根据obj对象类型调用匹配的方法g(Super obj)
(如何判断传入参数类型?如此处obj为什么类型数据?
Super obj = new Sub();
Goo goo = new Goo();
goo.g(obj);
Super类型,Super obj = new Sub()该句意思为将Sub()型赋给super型数据obj,以被赋值对象
的类型为准,所以obj类型为super.

————这就是 看对象调用方法,发生于对象被传参(来判断调用方法)时,

又,再调用obj.f(),则调用super型对象的f方法,但由于super对象实际值为子类sub型,而子类进行了方法的重写,
所以实际为调用子类的f方法,因此为sub.f
————这就是看引用调用方法,发生于子型赋父型的对象(此处为sub赋给super)调用自身方法时
(非重载的方法——相同的参数,相同的名字——签名相同)

9 看代码时看到调用方法时需判断什么?
是否需要判断调用的方法是重写还是重载的
重载则看对象参数,重写则看对象类型(若是

16 类中private a,外部定义一个类后cell.a = 1;是否正确?
不正确,private后只能在类中被调用。

17 访问控制修饰符有哪些?分别起什么作用?
public
private
protected
默认不写
补充图。

18 类的访问修饰有几种?
public 或 什么都不写。

19 类中成员的访问修饰有几种?
四种

个人反省
1 看代码速度太慢

20 public void g(Super obj) {
System.out.println ("g(Super)");
obj.f();
}

g(sub){
super.g()
}
super.g()调用的是什么方法?
传入参数为小赋大的对象,调用的方法为子类重写的方法。

21 import xx.xx.* 可导入?
包中所有类。

22 import xx.aa 提示错误是什么原因?
aa类没有public.

23 演示属性跨包访问。(*跨包继承类)

24 什么是垃圾?垃圾回收机制是?
没有任何引用所指向的对象为垃圾,
GC不定时到内存中回收垃圾,不一定发现垃圾就立刻回收,可调用System.gc()建议JVM尽快回收。

25 什么是内存泄漏?
即不被使用的内存没有被及时回收。

26 如何避免内存泄漏?
将不再使用的对象的引用设置为null。

27 成员变量的生命周期为?
从对象在堆中创建开始到堆中被回收结束。

28 堆
1 存储正在调用的对象中的成员变量

28 栈
1 存储正在调用中的(包括类中)方法的所有局部变量,包括方法内的参数
2 调用时会被分配一个对应栈帧,存储局部变量及参数,
3 调用方法结束,则被回收

28 非堆(方法区)存放的是什么?
.class文件及方法。

29 cell c = new cell() 具体运行过程.
1 在方法区先加载.class文件,并存储方法(如果有静态变量也会存储静态变量)
2 在堆中新建cell对象
3 在栈中新建引用c指向cell

30 多个对象,方法区有几个方法?如何分辨是什么对象?
一个方法
this.

31 成员变量分几种?
静态变量,实例变量。

class{
int a;
static int b;
}

32 什么是静态变量?上例哪个是?
有static修饰的变量,不属于对象,属于类,存储在方法区,只有一份,使用 类名. 访问

33 什么是实例变量?
属于对象的,存储在堆中,有几个对象就有几份,使用 对象. 访问。
即成员变量

34 静态变量何时用?
所有对象共享的资源如视频/图片/音频等。

35 静态变量a,构造方法中a++,问第一次建立对象赋值a=0,第二次建立对象a=
1

36 静态方法何时用?
对象与方法无关仅与时定义,有关时定义实例方法。

37 静态方法特点是?
由static修饰
存在方法区中,只有一份
常常通过类名.来访问
没有隐式this传递,静态方法中不能直接访问实例成员
何时定义静态方法:方法的操作仅与参数相关而与对象无关时使用

38 printWall为何要加static?
不加,则需加this才能访问
加了,通过类名.printWall便可访问(而类名.会自动加载)

39 首字母大写为类。

40 新建对象为小写。

41 静态方法需要新建对象调用吗?
不需要

42 静态块的特点是?如何定义?
由static修饰
类被加载期间自动执行,
因为类只被加载一次,所以静态块也只执行一次

何时用:常常用于初始化静态资源(图片、音频、视频...)

static {

}

42 概念要清晰,并将每一步所造成的作用明列。

43

---

1 java内存管理又几块组成?
堆 栈 方法区

Cell cell = new Cell();
cell.row++
cell.moveleft
上例各步分别处于什么区?调用方法时方法区的方法有几份?如何区分是不同的对象调用呢?
首先在方法区中加载.class并存储方法,如果有静态相关代码会先运行相关代码
接着在堆中新建一个Cell对象,再在栈中新建一个引用指向Cell.
再调用方法区的方法,方法运行则会在栈中生成一个匹配的栈帧存储方法所有局部变量及参数 调用完栈帧清除

1份

通过this.(调用方法时实际传入的是带有this的参数)

2 堆,栈,方法区分别存储什么数据?
堆,new出来的对象,包括成员变量
栈,正在调用中的方法的所有局部变量及参数。
方法区,方法区中存储.class字节码文件及存储方法

3 成员变量的生命周期为?
在堆中创建对象开始至对象被回收

4 重载和重写分别发生于什么场合?
重载发生于传参,传参时判断参数类型,根据参数类型调用匹配的方法。(小转大的情况,参数类型还是大)
重写则发生于小赋小或小赋大的对象调用自身方法时,需判断子类有无重写调用的方法,若有,则调用。

5 重写需要遵守什么规则?
两同两小一大
两同:重写方法签名要与父类方法相同
两小:子类方法的返回类型必须小于或等于父类的方法;抛出的异常~
一大:子类方法的访问权限大于父类的。

6 如何理解子类方法的返回值类型必须小于等于父类的?
void,基本类型时,必须相等
引用类型时,可以小于

7 class Aoo(){
void show(){

}
}

class Boo() extends Aoo{
void show(){

}
}
上方代码是否实现了重写?

8 class Aoo(){
void show(){

}
}

class Boo() extends Aoo{
int show(){
return 1;
}
}
上方代码是否实现了重写?
是(方法名与参数列表相同)
但会报错,返回值为void及基本类型时重写方法必须与父类相同。

9 class Aoo(){
double show(){
return 0.0;
}
}

class Boo() extends Aoo{
int show(){
return 1;
}
}
上方代码是否实现了重写?
是(方法名与参数列表相同)
但会报错,返回值为void及基本类型时重写方法必须与父类相同。

10 class Aoo(){
Boo xx(){
return null;
}
}

class Boo() extends Aoo{
Aoo xx(){
return null;
}
}
上方代码是否会报错?如果报错原因是?
会,下方Boo类内重写方法会报错,
子类重写返回值类型大于父类的原方法。

11 Boo xx(){
return null;
}
上方代码是否是什么意思?
定义了一个返回Boo类型值的叫做xx的方法。

12 同一类文件下,类间可以互相调用新建方法吗?
class Aoo(){
Boo xx(){
return null;
}
}

class Boo() extends Aoo{
Aoo xx(){
return null;
}
}
可以

13 重写与重载的区别是?
重写
1,发生在父类及子类中,方法名称及参数列表相同,方法体不同
重载
1,发生在一个类中,方法名称相同参数列表及方法体不同

14 访问控制分为什么?
包及访问控制修饰符

15 Java中如何解决命名冲突的问题?
用包,在定义一个类时,还需要定义包名。

16 定义包名的语法是?
package xx.xx.xx;

17 类的全称是什么?类通常是小写还是大写?
package xx.xx.xx.class
大写

18 跨包访问类有几种方法?
①import java.util.Scanner;
②java.util.Scanner scan = new java.util.Scanner(System.in)

19 命名类应大写还是小写?
Cell

20 package的建议命名方式是?
域名反写 . 项目名称 . 模块名称 . 类名
cn.tedu tedumana classmana lampmana

21 为何不同包的类可以同名?
类名实际包含包名,两个类的包名不同,自然类名可以相同。<br />

22 在设计程序时应用什么思想设计?
封装的思想——
即将属性私有化,方法公开化。(使数据仅能在当前类中访问,其他类无法访问,从而实现其他类只能调用
当前类内方法来间接访问(不一定修改),想想看,如银行卡密码定义在了银行卡类中,
其他类可以直接访问公有成员变量银行卡密码来修改,那样还安全吗?因此必须私有化,使得当类中变量
只能通过调用当类方法访问,当类方法中可以不设定改变密码的方法,从而实现封装)

因此类内属性必须私有化,方法则需公开化。

23 如何简单理解封装?
即只能通过类内方法定义类内成员变量,不可直接定义。

24
A类
public class Point{
private int x;
private int y;
Point(int x,int y){
...
}
public int distance(Point p){}
}

同一包内B类
Point p1 = new Point(1,2);
p1.x = 4;
int x = distance(p1);

是否会报错?
p1.x = 4,会报错,x为私有成员,无法从外部直接访问修改。

25 访问修饰符有哪些?

10 看代码与写代码与判断时不同的思维方式。
判断题,复杂问题要简化,与基本模型比照
看代码,快速理解当句词意

时间: 2024-12-28 15:54:13

临时中转区的相关文章

用普通IO接收串口数据

<pre name="code" class="cpp">//文件urece.h #ifndef _URECE_H_ #define _URECE_H_ #define V_BATOU 0x80 //电池充满 #define V_BATLV 0x40 //电池低电压 #define V_BATOI 0X20 //电池放电过流 #define V_BATOTP 0x10 //电池过温 #define V_BATOTIM 0x08 //电池充电超时 #def

iOS程序执行顺序 AppDelegate及 UIViewController 的生命周期

iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 iOS应用程序的状态切换很重要,而UIViewControler对于iOS这种MVC模式来说尤为重要,基本都要继承自他. 一.iOS程序的启动执行顺序 1 程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2  程序完成加载 -[AppDelegate application:didFinishLaunchingWithOptions:] 3 创建window窗口 4 程序

iOS的后台任务

翻译自:http://www.raywenderlich.com/29948/backgrounding-for-ios (代码部分若乱码,请移步原链接拷贝) 自ios4开始,用户点击home按钮时,你可以将app设计为挂起状态.app在内存中,除非用户再次返回到app,否则该app暂停运行.都是这种情况吗? 当然不是,在一些例外的情况下,app仍然可以在后台保持运行.这篇文章将介绍如何以及何时应用(几乎)所有这些后台操作功能. 应用后台运行模式实际上有很严格的限制条件,在ios上实现真正的多任

围绕大闸蟹开启的恶战背后:生鲜链条的重塑?

虽然现在国内的农产品.水产品等异常充沛,能够保证反季节蔬菜.水果.水产.肉类.蛋类的全面供应,但吃"时令"食物依然是国人最大的爱好.暂且不提上世纪三十年代上海人民以大闸蟹充饥"勉强度日"的事儿,大闸蟹无疑是最强调时间节点的一种美食.而围绕大闸蟹展开的恶战,在今年显得尤其激烈. 如果说之前限于物流.保鲜技术等因素,导致大闸蟹还只是在部分城市销售,那么在今年大闸蟹完成了覆盖全国的革命性进化.而天猫.京东.顺丰等旗下的生鲜部门也都将大闸蟹当成发力的重点,试图借机起飞.而这

Oracle大数据查询优化

1.对于像状态之类的列,不是很多的,就可以加位图索引,对于唯一的列,就加唯一索引,其余的创建普通索引. 2.尽量不要使用select * 这样的查询,指定需要查询的列. 3.使用hits  select /*+index(索引名称) index(索引名称)*/ supply_id from CSS_SUPPLY  where ... 4.将表table在线重定义为分区表,在name列上使用hash分区或者range分区 5.如果是exedata平台,不要用索引,尽量少用hint: 6.用并行:

版本控制之git学习

最近学习了一下版本控制中比较符合开发者气质的Git,这里做一个总结.一来梳理所学的内容:二来也作为起点后续继续丰富.学习的方式主要为网络学习和个人实践.推荐两个学习网页,互相参考必有所成. 博客园:http://www.cnblogs.com/best/archive/2017/09/07/7474442.html 廖雪峰:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 ---

线程创建_同步_通信

目录 1. 基本概念:程序.进程.线程 2. 并行和并发 3. 创建线程的两种方式 3.1 通过继承Thread方式 3.1.1 步骤: 3.1.2 两个问题 3.1.3 案例演示 3.2 通过实现Runnable的方式 3.2.1 步骤 3.2.2 代码演示 3.3 两种方式的比较 4. Thread类中常用方法 4.1 常用方法 4.2 线程的调度 4.3 线程的优先级 4.4 线程的分类 5. 线程的声明周期 5.1 生命周期的几个状态 5.2 线程状态转换图 6. 线程的同步 6.1 线

Git面试题

1.Git和SVN有什么区别? 1.Git是一个分布式的版本控制工具,SVN 是集中版本控制工具 2. Git属于第3代版本控制工具,SVN则属于第2代版本控制工具 3. Git客户端可以在其本地系统上克隆整个存储库,SVN的版本历史记录存储在服务器端存储库中 4. Git即使离线也可以提交,SVN只允许在线提交和回滚 5. Git的Push/pull 操作更快,而SVN Push/pull 操作较慢 6. Git工程可以用 commit 自动共享,但SVN没有任何东西自动共享 2. 列举工作中

第二课 栈_队列_堆

内容概览及预备知识: 预备知识:栈与队列: STL基本的栈操作(stack): 1 #include <iostream> 2 using namespace std; 3 4 #include <stack> 5 int main(){ 6 stack <int> stk; 7 if(stk.empty()){ //判断是否为空 isempty() 8 cout <<"The Stack is empty!!!"<<endl