一、this和super的作用以及this()和super()的区别
this用来指向当前实例对象,它的一个非常重要的作用就是用来区分对象的成员变量与方法的形参(当一个方法的形参与成员变量的名字相同时,就会覆盖成员变量)
class people{
String name;
//正确的写法
public People(String name){
this.name = name;
}
//错误的写法
public People(String name){
name = name;
}
}
super 可以用来访问父类的方法或成员变量。当子类成员变量与父类有相同名字时也会覆盖父类的方法或成员变量,要想访问父类的方法或成员变量只能通过super关键字来访问
public class Animal {
String name = "旺财";
double weight = 10 ;
public Animal(String name) {
// this.name = name;
}
public void eat() {
System.out.println("动物进食");
}
public void bark() {
System.out.println("咆哮");
}
}
public class Dog extends Animal{
public Dog(String name) {
//调用父类构造器
super(name);
}
public void play() {
//调用父类方法
super.eat();
super.bark();
//调用父类属性
System.out.println("我叫:" + super.name);
}
public static void main(String[] args) {
Dog d = new Dog("来福");
d.play();
}
}
二、2、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)?
接口可以继承接口。
public interface InterfaceA {
}
interface InterfaceB extends InterfaceA{
}
抽象类可以实现(implements)接口。
public interface InterfaceA {
}
abstract class TestA implements InterfaceA{
}
抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
public class TestA{
}
abstract class TestB extends TestA{
}
三、3、抽象类abstract class 和 interface有什么区别?
抽象类是一种类结构而接口是一种行为准则。抽象类包含类的所有特征和抽象方法,接口只能有常量和为实现的方法。子类只能继承一个抽象类,一个类可以实现多个接口。抽象类由子类通过extends进行扩展,接口由实现类通过implement进行扩展。抽象类能且只能继承一个父类;接口可以继承多个接口,但不能继承任何类。
- 抽象类可以有构造方法,接口中不能有构造方法。
- 抽象类中可以有普通成员变量,接口中没有普通成员变量
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。 - 抽象类中可以包含静态方法,接口中不能包含静态方法
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
- 一个类可以实现多个接口,但只能继承一个抽象类
四、String,StringBuffer 和 StringBuilder 的区别?
S tring 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
相同点:它们都可以存储和操作字符串,同时它们都使用final修饰,都属于终结类不能派生子类,操作的相关方法也类似例如获取字符串长度。
不同点:String是只读字符串,也就是说String引用的字符串内容是不能被改变的,而StringBuffer和StringBuilder类表示的字符串对象可以直接进行修改,在修改的同时地址不会发生改变。
String类的内容一旦声明则不可改变,而StringBuffer类与StringBuilder类声明的内容可以改变,StringBuffer类中提供的方法都是同步方法,属于安全的线程操作,而StringBuilder类中方法属于异步方法,属于非线程安全的操作。
五、4、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
interface MyInterFace{
void say();
}
public class ProxyTest
{
public static void main(String[] args)
{
ProxyTest p = new ProxyTest();
p.getSay().say();
}
public MyInterFace getSay(){
return new MyInterFace()
{
public void say()
{
System.out.println("Say");
}
};
};
}