Java基础_重载与重写

重写(Override)
1.概念
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
2.功能
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

3.注意点
1.参数列表必须完全与被重写方法的相同。
2.返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
4.父类的成员方法只能被它的子类重写。
5.声明为 final 的方法不能被重写。
6.声明为 static 的方法不能被重写,但是能够被再次声明。
7.重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
8.构造方法不能被重写。

重载(Overload)
1.概念
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
2.功能
一个类的多态性表现
3.注意点
1.被重载的方法必须改变参数列表(参数个数或类型不一样);
2.被重载的方法可以改变返回类型;
3.被重载的方法可以改变访问修饰符;
4.被重载的方法可以声明新的或更广的检查异常;
5.方法能够在同一个类中或者在一个子类中被重载。
6.无法以返回值类型作为重载函数的区分标准。

总结 重写和重载的区别

基础案例

package day04_0220;

/*
 * inherit 继承
 * extends 继承、扩展
 * 人类               Person  类别较大        父类     super class
 * 学生类型      Student 类别较小        子类      sub class
 * 老师类型      Teacher 类别较小        子类      sub class
 * java语言中,使用extends关键字,来描述类之间有继承关系
 * 子类 extends 父类             子类 继承于/扩展于 父类,子类是对父类的延申
 * 
 */
public class inheritDemo {

	public static void main(String[] args) {
		Student s = new Student();
		//System.out.println(s);
		Teacher t = new Teacher("jack",23,'男',"js001");
		//System.out.println(t.age);

	}

}

//人类
class Person {
	String name;
	int age;
	char gender;

	public Person() {
		System.out.println("执行Person()方法");
	}

	public Person(String name, int age, char gender) {
		this.name = name;
		this.age = age;
		this.gender = gender;
		System.out.println("执行Person(String name,int age,char gender)方法");
	}
}

//学生类
class Student extends Person // 声明学生类,继承于人类。
{
	// 可以在子类中,添加当前类特有的属性
	String sno;

	// 父类构造方法,不会从父类继承到子类
	// 子类构造器中,会默认先调用父类的无参构造方法,以完成对 从父类继承下来属性的 赋值初始化的工作
	
	public Student() {
		super();
		System.out.println("执行Student()方法");
	} 
	public Student(String name, int age, char gender, String sno)
	{
		super(name,age,gender);
		this.sno = sno;
	}
}

class Teacher extends Person
{
	String tno;
	public Teacher() {
		super();
		System.out.println("执行Teacher()方法");
	}
	public Teacher(String name, int age, char gender, String tno)
	{
		super(name,age,gender);
		this.tno = tno;
		System.out.println("Teacher(String name, int age, char gender, String tno)");
	}
}

package day04_0220;

public class inheritDemo2 {
	public static void main(String[] args) {
		Dog dog = new Dog("哈巴狗",'公',"京巴");
		dog.showPet();//调用父类继承下来的方法
		dog.showDog();
		
		//向上造型
		//一个子类型的对象 可以向上造型为 父类的类型
		// 定义 父类的引用 指向 子类的对象
		//将子类对象当作父类型来看待,不能再调用子类方法
		Pet p = dog;//将狗对象当作宠物看待,不当作狗看待
		p.showPet();//编译时会根据引用变量类型检查,是否有相应方法
		
		//方法的重写/覆盖 Overwrite/Override
		// 在子类中可以重写 从父类中继承来的方法
		//要求:方法名,参数列表,和父类相同
		p.cry();
		//编译时,会根据引用变量类型,进行语法检查判断
		//运行时,会调用具体对象的方法(调用到子类重写方法)
		//运行时绑定,即运行时才绑定调用具体对象的方法
		Cat cat = new Cat("小花",'母',"黄色");
		cat.showCat();
		cat.cry();
		
		Pet c2 = cat;
		//c2.cry();

}
	}


class Pet {
	String name;
	char gender;

	public Pet() {
		System.out.println("执行Pet()");
	}

	public Pet(String name, char gender) {
		super();
		this.name = name;
		this.gender = gender;
		System.out.println("执行Pet(String name, char gender)");
	}
	public void showPet() {
		System.out.println("名字:"+name+" 性别:"+gender);
	}
	public void cry() {
		System.out.println(name + "在叫");
	}

}

class Dog extends Pet{
	String strain;
	public Dog() {
		System.out.println("执行Dog()");
	}
	public Dog(String name, char gender, String strain) {
		super(name, gender);
		this.strain = strain;
		System.out.println("执行Dog(String name, char gender, String strain)");
	}
	public void showDog() {
		//super.showPet();//明确调用父类showPet方法
		showPet();
		System.out.println("品种:"+strain);
	}
	public void cry() {
		System.out.println(name + "在叫:汪!汪!汪!");
	}
}
class Cat extends Pet{
	String eyeColor;
	public Cat() {
		System.out.println("执行Cat()");
	}
	public Cat(String name, char gender, String eyeColor) {
		super(name, gender);
		this.eyeColor = eyeColor;
		System.out.println("执行Cat(String name, char gender, String eyeColor)");
	}
	public void showCat() {
		//super.showPet();//明确调用父类showPet方法
		showPet();
		System.out.println("颜色:"+eyeColor);
	}
	public void cry() {
		System.out.println(name + "在叫:喵!喵!喵!");
	}
}

数组
package day04_0220;

import java.util.Arrays;

public class ArrayDemo {
	public static void main(String[] args) {
		
		int[][] ary = new int[3][];
		
		System.out.println(Arrays.toString(ary));
		
		ary[0]  = new int[] {10,20,30,14};
		ary[1]  = new int[] {13,24,564};
		ary[2]  = new int[] {1,3};
		System.out.println(Arrays.toString(ary));
		for (int i = 0; i < ary.length; i++) {
			System.out.println(Arrays.toString(ary[i]));
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值