20170819 - 今日技能封装 - Q

Posted 清及

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20170819 - 今日技能封装 - Q相关的知识,希望对你有一定的参考价值。

1 继承无抽象方法的抽象类,不重写方法会报错吗?
不会。

2 实现接口时需注意什么?
方法前必须加public,由于接口内默认为抽象方法,一般前缀为public(一般会加) abstract,子类访问权限默认要
大于父类,所以必须加上public

3 可以强转的条件是什么?
被强转对象实际上是强转成的类型。
如果是转换成接口类实例,则对象对应的类必须也实现了该接口(相当于小转大,对象所属的类实现了
接口,新建的对象向上造型接口类引用。

4 类内部调用自身的常量或静态变量是否需要添加类名?
不需要,类内部已自动添加

5 如何理解多态?
多态分为对象的多态和行为的多态,
对象的多态指的是同子类内相同名字的方法具有不同的行为。(重写)
敌机,大蜜蜂——有相同的加分,但大蜜蜂加分更多,他们同样都是飞行物父类的实例。(重载)
行为的多态指的是对象根据传入参数的不同而有不同的行为。(同样是在车上碰到你,美女你会爽,男你会恶)

6 重写的参数列表必须相同吗?参数列表包含什么?什么可以不同?
必须相同。参数类型+参数的位置顺序(参数名可以不同),返回值类型。
interface Aoo{
void Aooo(int a,double b);
}

class Boo implements Aoo{
public void Aooo(double a,int b){

}
}
错误
interface Aoo{
void Aooo(int a,double b);
}

class Boo implements Aoo{
public void Aooo(int b,double a){

}
}
正确。

7 显示状态的思路是?

原理是通过内置类的监控线程监控鼠标动作,并做出不同的响应。

首先有四种状态(第一将所有状态罗列),开始页面状态,运行状态,暂停状态,结束页面状态,

进入游戏后首先是开始状态,因此初始化状态为开始状态,

点击后进入运行状态,

运行中一旦鼠标离开页面则进入暂停状态

移入则继续运行

一旦消耗完所有生命则进入结束页面状态

点击页面结束状态则重新开始游戏,根据不同情况设置不同监听事件,设置思路是

在监听响应类中设置,一旦点击,移出,移入则响应不同事件(重新画页面,并且将状态更改成相应状态)

该线程有些像是独立于内部循环函数的循环线程,如,移出,则立刻画暂停,一旦移入则更改状态为运行,那么便继续之前的run流程(run内调用paint又画之前的图),继续运行。


8 debug的思路是什么?
第一检查代码是否有运行,打桩。
每一处细节都不可放过。(flyings中认为不可能出错的地方都debug了)

9 飞机大战中删除数组元素,传入了一个数组类型参数,为何外部值不改变?若想要外部值改变,需要如何处理?

由于参数指向在缩容时改变了(指向了缩容时产生的新数组),所以外部传入的参数自然没有改变。

返回新生成的数组,再赋值给原数组。

 

Person p1 = new Person(10);

//创建了一个对象
//p1.age=10;

modify(p1); 
//modify函数传参,创建了一个在modify函数里面的局部变量p
//你应该明白p是一个新的变量,这里类似于执行了p=p1,这两个是指向的同一个对象的
//p.age=10;

p = new Person(20);
//注意,这里!这里!
//这里是p被重新赋值了,p指向了新的对象new Person(20);
//p.age=20;
//和p1指向的那个对象一毛线关系都没有啊

所以,你的代码是在函数内部,把局部变量给重新赋值了
是没法修改到外面的对象的,因为你已经把唯一能访问到外面那个p1的p给重新赋值了!

public static void modify(Person p){
   p.age=20; //只有这样才能修改对象!
}

同理,如果你写成这样:

public static void modify(Person p){
   p = null;//对外面的p1没有任何影响
}

我举个例子,你就比较好理解了。
你创建了一个100000000个元素的数组,比如就叫p1,你把数组通过参数传进函数里面,那么:
这个参数p(类似于p = p1),p和p1他们是指向同一个对象
不是说modify(int[] p)重新创建了100000000个元素的数组。
这个应该很好理解。

那么:
然后你通过p的内置函数怎么操作p都行,都是操作的那100000000个元素的数组。
但是,你不能把p重新赋值啊。
重新赋值它就不是之前那个数组啦!

比如:
你重新p = new int[100000000],就创建了一个新的100000000个元素的数组啊。
你执行p = null,也只是销毁了这个引用,不让它指向100000000个元素的数组而已。
对外面p1的那个数组不会再有任何影响了。

以上是关于20170819 - 今日技能封装 - Q的主要内容,如果未能解决你的问题,请参考以下文章

20170811 - 今日技能封装 - Q

20170812 - 今日技能封装 - Q

20170804 - 今日技能封装 - Q

20170803 - 今日技能封装 - Q

20170810 - 今日技能封装 - Q

20170802 - 今日技能封装 - Q