2016.9.14小结

1、instanceof作用是什么?
用于判断运行时对象的真正类型,若真正类型为null则返回false
2、什么是抽象方法?什么是抽象类?
一个类中,只有方法的定义,没有方法的具体实现。那么该方法就称为抽象方法,而拥有抽象方法的类叫做抽象类。

3、接口如何定义?接口如何实现?实现一个接口必须要做什么?
将类中的方法抽取出来形成接口。接口是一种抽象行为,可以看做是抽象类的特例。抽象类中可以有抽象方法,也可以有具体的方法,但是接口中只能有抽象方法,定义接口用interface,实现接口用implement
4、接口中的方法修饰符是什么?接口中的变量修饰符是什么?
接口中的方法都是抽象方法,修饰符为public abstract,即使缺省,也是公共的抽象方法。接口中变量的修饰符为public static final
5、接口和抽象类的区别是什么?
一、抽象类和接口都不能实例化;二、抽象类中可以有抽象方法,也可以有具体方法,但接口中只能有抽象方法;三、抽象类中定义的变量是普通属性,但是接口中定义的变量是公共的静态的常量;四、一个类只能继承一个抽象类,但可以实现多个接口。
6、什么时候使用继承?什么时候使用接口?
当子类需要拥有父类的属性和方法时使用继承。而类中想要实现某种行为时接口要比继承更好。类只能有一个继承,但可以有多个接口,所以想要实现多种行为时要用到接口。
JAVA代码查错
a、
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}

定义为抽象类,不能有方法的实现

b、 abstract class Something {
private abstract String doSomething ();
}

private方法默认声明为final,不能被子类重写,但是声明为抽象方法,是要求该方法子类重写,所以矛盾。抽象方法不能声明为private和static。

c、public class Father{
public Father(int x){

}
}

class Child extends Father{
public Child(){

}
}
子类对象产生之前必须调用父类的构造方法产生父类对象。那么子类构造方法的第一句默认为super()。如果父类中没有定义无参构造方法,那么子类构造方法必须显示调用。

d、public class Father{
public void test(){

}
}

class Child extends Father{
public void speak(){
}
}
class Test{
public static void main(String[] args){
Father f = new Child();
f.speak();
}
}
多态调用时,父类引用只能调用父类中定义的属性和方法,不能调用子类特有的属性和方法
e、interface A{
int x = 0;
}
class B{
int x =1;
}
class C extends B implements A {

public void pX(){
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}

当打印x时,引起歧义。不知道x是父类中继承的x,还是从实现接口中的x。
要访问父类中继承的x属性,通过super.x访问。
要访问接口中定义的x,由于接口中的变量修饰符为:public static final 可以通过 接口名.x 访问。

说出运行结果

1、abstract class Base{
abstract public void myfunc();
public void another(){
System.out.println("Another method");
}
}

public class Abs extends Base{
public static void main(String argv[]){
Base a = new Abs();
a. another ();
}
public void myfunc(){
System.out.println("My Func");
}
public void another (){
super.another();
myfunc();
}
}
Another method
My Func
2、interface MyIn{}
public class MyClass implements MyIn{
static String str;
public MyClass(){

}
public static void main(String[] args) {
MyClass myClass = new MyClass();
System.out.print(myClass instanceof MyIn);
System.out.println(str instanceof String);
}
}
true//接口引用指向子类对象
false//str被初始化为null

原文地址:https://www.cnblogs.com/zzyytt/p/5890496.html