2010-01-01 31 views

Trả lời

25

Có, quá tải phương pháp cuối cùng là hoàn toàn hợp pháp.

Ví dụ:

public final void doStuff(int x) { ... } 
public final void doStuff(double x) { ... } 
1

Có thể.

Bạn có thể kiểm tra loại điều này bằng cách viết các lớp Java nhỏ.

class TestClass{ 
    final public void testMethod(){ 

    } 

    final public void testMethod(int i){ 

    } 
} 
2

YES, tại sao không? Nó là hợp pháp như quá tải phương pháp không cuối cùng.

Nhưng bạn không thể ghi đè chúng (bạn đã biết).

Ví dụ:

public final void func(String x) {/* code */} 
public final void func(double x) { /* more code */ } 
public final void func(int x) { /* yeah I have still more code */ } 
+0

Tại sao một phiếu bầu xuống? –

0

có quá tải phương pháp cuối cùng là có thể trong java.As phương thức bị hạn chế không để ghi đè lên các phương pháp.

trong khi danh sách đối số quá tải phải là loại phương pháp quá tải khác nhau.

8

Có, rất nhiều khả năng.

Một chương trình nhỏ để chứng minh điều đó:

class A{ 
    final void foo(){ System.out.println("foo ver 1 from class A"); } 
    final void foo(int a){ System.out.println("foo ver 2 from class A"); } 
    } 


class B extends A{ 
    final void foo(long l){ System.out.println("foo ver 3 from class B"); } 
    // final void foo(){ System.out.println("foo ver 1 from class A"); } NOT ALLOWED 
} 

public class Test {  
    public static void main(String [] args){ 
     B obj = new B(); 

     obj.foo(); 
     obj.foo(1); 
     obj.foo(1L); 
    } 
} 

Output:

 
foo ver 1 from class A 
foo ver 2 from class A 
foo ver 3 from class B 
13

Vâng, nhưng lưu ý rằng công văn năng động có thể không làm những gì bạn đang mong đợi! Nhanh dụ:

class Base { 
    public final void doSomething(Object o) { 
     System.out.println("Object"); 
    } 
} 

class Derived extends Base { 
    public void doSomething(Integer i) { 
     System.out.println("Int"); 
    } 
} 

public static void main(String[] args) { 
    Base b = new Base(); 
    Base d = new Derived(); 
    b.doSomething(new Integer(0)); 
    d.doSomething(new Integer(0)); 
} 

này sẽ in:

Object 
Object
+1

Có, bởi vì cả hai đối tượng được tạo trong phương thức chính đều có kiểu dữ liệu cha mẹ cao nhất là 'Base', cả hai đều sẽ in" * Object * ". Vì cá thể 'Derived' có mối quan hệ" * là a * "với lớp' Base', đối tượng này có thể được đưa vào 'Derived' để gọi phương thức in" * Int * ". –

+0

@IanCampbell Chính xác '((Nguồn gốc) d) .doMột cái gì đó (1); ' –

+0

Công văn động sẽ xảy ra khi bạn ghi đè lên các phương thức, không phải với quá tải. – sharhp

0

vâng chúng ta có thể quá tải các phương pháp chính thức

1

Có:

class a { 
    final void method1(int a,int b) { 
    System.out.println("super class"); 
    int d = a+ b; 
    System.out.println(d); 
    } 
} 
class b extends a{ 
    final void method1(int a) { 
    System.out.println("sub class"); 
    System.out.println(a); 
    } 
} 
public class c { 
    public static void main(String ar[]) { 
    b m = new b(); 
    m.method1(10); 
    } 
} 
+1

Bạn nên định dạng mã của bạn và thêm một cái gì đó để giải thích câu trả lời của bạn. – Jonathan

Các vấn đề liên quan