[b]lesson4(A上):[/b]
子类继承父类中的所有成员变量和成员方法,但不继承父类中的构造方法.
在设计类时,如果没有定义构造方法,在产生类的实例对象时,系统会自动调用一个无参的构造方法,但是如果定义了一个构造方法,系统就不再自动调用那个无参的构造方法,而是调用自定义的构造方法.
如果子类的构造方法中没有显示的调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法.
******子类对象的实例化过程 23% 有点疑虑
覆盖方法时,子类方法的访问权限不能比父类的弱.
final 类型的常量只能在定义的时候赋初值,或者在构造方法中赋初值.(注意要在所有构造方法中都要对它赋值)
接口是常量与抽象方法的集合.接口是一种特殊的抽象类,只包含常量和方法的定义,没有变量与方法的实现.
接口中的成员都是public访问类型的,接口里的变量默认是用public static final标识的.
对象的类型转换.
子类对象可以自动转换为父类,父类转换为子类必须使用强制转换.
instanceof操作符可以用它来判断一个实例对象是否属于一个类.
匿名内部类(94%)
子类继承父类中的所有成员变量和成员方法,但不继承父类中的构造方法.
在设计类时,如果没有定义构造方法,在产生类的实例对象时,系统会自动调用一个无参的构造方法,但是如果定义了一个构造方法,系统就不再自动调用那个无参的构造方法,而是调用自定义的构造方法.
如果子类的构造方法中没有显示的调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法.
class Person{
public String name;
public int age;
public Person(){
}
public Person(String name,int age){
this.name=name;
this.age=age;
}
public void getInfo(){
System.out.println("name="+name+",age="+age);
}
}
class Student extends Person{
public String school;
public Student(){
//super();
//super("zhange",15);
System.out.println("fdfd");
}
public void study(){
}
}
class TestStudent{
public static void main(String args[]){
Student a=new Student();
a.getInfo();
}
}
******子类对象的实例化过程 23% 有点疑虑
覆盖方法时,子类方法的访问权限不能比父类的弱.
final 类型的常量只能在定义的时候赋初值,或者在构造方法中赋初值.(注意要在所有构造方法中都要对它赋值)
接口是常量与抽象方法的集合.接口是一种特殊的抽象类,只包含常量和方法的定义,没有变量与方法的实现.
接口中的成员都是public访问类型的,接口里的变量默认是用public static final标识的.
对象的类型转换.
子类对象可以自动转换为父类,父类转换为子类必须使用强制转换.
instanceof操作符可以用它来判断一个实例对象是否属于一个类.
class A{
public void func1(){
System.out.println("A func1 is calling");
}
public void func2(){
call func1();
}
}
class B extends A{
public void func1(){
System.out.println("B func1 is calling");
}
public void func3(){
System.out.println("B func3 is calling");
}
}
class C{
public static void main(String args[]){
B b=new B();
callA(b);
A a=b;
callA(new A());
}
public static void callA(A a){
if(a instanceof B){
B b=(B)a;
b.func1();
b.func2();
b.func3();
}
a.func1();
a.func2();
}
}
匿名内部类(94%)