一起学Java(十二)

不积跬步,无以至千里;不积小流,无以成江海。

Java语言基础

Java方法详述(重载与重写)

重载的概念:

在同一个类中,允许存在一个以上的的同名方法,只要它们的参数个数或者参数类型不同即可。

重载的特点:

与返回值类型无关,只看参数列表,且参数列表必须不同(访问修饰符和返回值类型可以相同也可以不同)。

示例:

public class Test {
	
	public void test(){
        System.out.println("test1");
    }
 
    public void test(int a){
        System.out.println("test2");
    }   
 
    //以下两个参数类型顺序不同
    public void test(int a,String s){
        System.out.println("test3");
    }   
 
    public void test(String s,int a){
        System.out.println("test4");
    }   
 
    public static void main(String[] args){
        Test o = new Test();
        o.test();
        o.test(1);
        o.test(1,"test3");
        o.test("test4",1);
    }

}

 运行结果: 

test1
test2
test3
test4

重写的概念:

重写是子类重写父类允许访问的方法。返回值和参数类型必须相同。(存在于子类和父类中) 

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

示例:

class Animal{	
	public void move(){
		System.out.println("动物可以移动");
	}
}
 
class Dog extends Animal{
	public void move(){
		System.out.println("狗可以跑和走");
	}
}
 
public class TestDog{
	public static void main(String args[]){
	   Animal a = new Animal(); // Animal 对象
	   Animal b = new Dog(); // Dog 对象
 
	   a.move();// 执行 Animal 类的方法
	   b.move();//执行 Dog 类的方法
	}
}

运行结果:

动物可以移动
狗可以跑和走

注意一个错误:

class Animal{	
	public void move(){
		System.out.println("动物可以移动");
	}
}
 
class Dog extends Animal{
	public void move(){
		System.out.println("狗可以跑和走");
	}
	public void bark(){
	      System.out.println("狗可以吠叫");
	   }
}
 
public class TestDog{
	public static void main(String args[]){
	   Animal a = new Animal(); // Animal 对象
	   Animal b = new Dog(); // Dog 对象
 
	   a.move();// 执行 Animal 类的方法
	   b.move();//执行 Dog 类的方法
	   b.bark();
	}
}

运行结果:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The method bark() is undefined for the type Animal

	at TestDog.main(TestDog.java:24)

原因:b的引用类型Animal没有bark方法。

需要这么改:

class Animal{	
	public void move(){
		System.out.println("动物可以移动");
	}
}
 
class Dog extends Animal{
	public void move(){
		System.out.println("狗可以跑和走");
	}
	public void bark(){
	      System.out.println("狗可以吠叫");
	   }
}
 
public class TestDog{
	public static void main(String args[]){
	   Animal a = new Animal(); // Animal 对象
	   Dog b = new Dog(); // Dog 对象
 
	   a.move();// 执行 Animal 类的方法
	   b.move();//执行 Dog 类的方法
	   b.bark();
	}
}

运行结果:

动物可以移动
狗可以跑和走
狗可以吠叫

  

重载和重写对比:

  重写 重载
位置 父子类、接口与实现类 本类
方法名称 一致 一致
参数列表 不能修改 必须修改
返回类型 不能修改 可以修改
异常 不能扩展 可以修改

猜你喜欢

转载自www.cnblogs.com/smilexuezi/p/11898663.html