多态中为什么存在类型转换?
多态语法
父类 变量名 = new 子类
多态父类可以调用子类中重写了父类的方法,但如果子类中有的方法,父类没有,父类就调用不了.这时就需要向下强转
例如
public class Father{
void test(){
System.out.println("父类方法")
}
}
public class Son{
@Override
void test(){
System.out.println("子类方法")
}
//子类特有的方法
void test1(){
System.out.println("子类特有的方法")
}
}
public class Demo{
public static void main(String[] args){
Father f = new Son;
//父类可以调用子类重写父类的方法
f.test();
//但是调用不了子类特有的方法
f.test1()//错误
//向下转型
Son s= (Son)f;
//这是可以调用子类特有的方法
s.test1();
}
}
根据你的理解,请解释什么面向接口编程
接口是一种定义规范和实现的分离;接口的出现降低了代码的耦合度,加强了代码的可拓展性和可维护性
this的作用是什么?都有哪些用途?
this 的作用: 在构造器中, 表示当前被创建的对象. 在方法中, 表示调用的对象.
this 的用途: 避免成员变量和局部变量同名时的二义性. 构造器的调用, 必须放在构造器第一行. 调用同一个类中的非static方法.
public class Demo{
private String name;
public Demo(){
}
public Demo(String name){
//由于就近原则,为了避免二义性,使用this代表该变量为成员变量
this.name = name;
}
}
super的作用是什么?都有哪些用途?
super作用: 调用父类的方法或者构造器.
super用途: 当子类覆盖了父类的方法时, 使用super去调用父类的方法. 当想用父类构造器时也可以使用super.
public class Father{
private String name;
private int age;
public Father(){}
public Father(String name,int age){
this.name=name;
this.age=age;
}
public void eat(){
System.out.print("父类特有的吃");
}
}
publice class Son extends Father{
private String weight;
public Son(){
//一般会默认调用父类的无参构造
super();//也可以使用super关键字手动调用父类的构造方法
}
public Son(String name,int age,String weight){
//子类调用父类的构造方法必须放在第一行,
//先对父类做初始化,在对子类做初始化
super(name,age);
this.weight = weight;
}
@Override
public void eat(){
System.out.print("子类特有的吃");
super.eat();//如果父类的方法被子类重写,子类还想调用父类的方法可以使用super关键字调用父类的方法
}
}
用static修饰的成员和不用static修饰的成员的区别?
用static修饰的成员属于类, 可以直接用类名调用也可以创建对象再使用但是不推荐. 使用static修饰的成员会在类加载时就会分配空间且初始化。
不用static修饰的成员变量属于对象, 使用时必须先创建对象, 再使用
静态方法可以调用其他静态成员不可以调用实例成员,但是普通方法里面可以调用静态成员,因为静态成员在类加载时就会分配空间且进行初始化,所以静态成员的创建在普通成员之前,所以静态方法在调用实例成员时还未创建,调用不了.