1. 重载:
同一个类中的多个方法名字相同,参数类型或者参数个数不同。调用方法是根据参数的个数和类型决定执行那个方法。
不同的返回值类型不能判读是否重载。
2. 重写:
子类和父类之间,如果子类方法的名字,参数类型和个数,返回值相同,则说明该子类重写了父类的方法。
父类的final方法不能重写
3. 重载和重写是java多态的一种表现形式。
4. 类实例的引用就是指向一个句柄(handle)的指针,这个句柄是一对指针:
一个指针指向一张表格,实际上这个表格也有两个指针(一个指针指向一个包含了对象的方法表,另外一个指向类对象,表明该对象所属的类型);
另一个指针指向一块从java堆中为分配出来内存空间。
5. Java中除了static和final方法外,其他所有的方法都是运行时绑定的。private方法都被隐式指定为final的(这样说我也没有依据),因此final的方法不会在运行时绑定。当在派生类中重写基类中static、final、或private方法时,实质上是创建了一个新的方法。
6. 构造方法是被隐式声明为static方法(对不对)。
父类:
public class Test12 {
Test12(){
System.out.println("父类的构造()方法======");
}
public void test1() {
System.out.println("父类的test1()方法======");
}
public void test2() {
System.out.println("父类的test2()方法======");
}
public static void test3() {
System.out.println("父类静态的test3()方法======");
}
private void test4() {
System.out.println("父类私有的test4()方法======");
}
public final void test5() {
System.out.println("父类fianl方法的test5()方法======");
}
}
子类:
public class Test13 extends Test12 {
public void test1() {
System.out.println("子类的test1()方法======");
}
public void test2() {
System.out.println("子类的test2()方法======");
}
public static void test3() {
System.out.println("子类静态的test3()方法======");
}
private void test4() {
System.out.println("子类私有的test4()方法======");
}
private void test6() {
System.out.println("子类私有的test6()方法======");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test12 t12 = new Test13();
// 根据对象t12对象引用的实际对象类型来调用对应的方法。
t12.test1();
t12.test2();
// 当子类类中重写基类中static、final、或private方法时,实质上是创建了一个新的方法。
t12.test3();
//t12.test6(); 虽然子类定义了test6()方法,但是父类并没有定义,一个类型引用只能引用引用类型自身含有的方法和变量。
//t12.test4(); 编译会报错的,test4()方法在类Test12中定义私有的,这里是无法调用到的
Test13 t13 = new Test13();
t13.test1();
t13.test2();
t13.test3();
t13.test4();
t13.test5();
// Test13 t14 = (Test13) new Test12(); 不能把父类对象引用赋给子类对象引用变量
// java.lang.ClassCastException: Test12 cannot be cast to Test13
}
}
执行结构:
父类的构造()方法======
子类的test1()方法======
子类的test1()方法======
子类的test2()方法======
父类静态的test3()方法======
父类的构造()方法======
子类的test1()方法======
子类的test1()方法======
子类的test2()方法======
子类静态的test3()方法======
子类私有的test4()方法======
父类fianl方法的test5()方法======