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()方法======