day04~面向对象~重载(Overload)~重写(Override)

今天看的视频比较少,主要是打打代码巩固一下之前学到的知识,今天学到的新知识主要是方法的重载。

回顾:访问实例变量和调用成员方法。

一、

public class Dog {
	public Dog(String name) {
		System.out.println("名字:"+name);
	}
	int dogAge;
	public void setAge(int age) {
		dogAge = age;
	}
	public int getAge() {
		System.out.println("年龄:"+dogAge+"岁");//打印1
		return dogAge;
	}
	
	String dogColour;
	public void setColour(String colour) {
		dogColour = colour;
	}
	public String getColour() {
		System.out.println("颜色:"+dogColour);
		return dogColour;
	}
	
	float dogLength;
	public void setLength(float length) {
		dogLength = length;
	}
	public float getLength() {
		System.out.println("体长:"+dogLength+"cm");
		return dogLength;
	}
	
	public static void main(String[] args) {
		Dog dog = new Dog("Wangwang");
		dog.setAge(1);//设定年龄
		dog.getAge();//获取年龄
		System.out.println("明年年龄:"+(dog.dogAge+1)+"岁");//打印2
		
		dog.setColour("golden");
		dog.getColour();
		
		dog.setLength(32f);
		dog.getLength();
	}

}

以上实例编译运行结果如下:

名字:Wangwang
年龄:1岁
明年年龄:2岁
颜色:golden
体长:32.0cm

二、

public class Family {
	//设置变量
	String name;
	int age;
	double height;
	String occupation;
	//设置变量的值
	public Family(String name) {
		this.name = name;
	}
	public void setAge(int setAge) {
		age = setAge;
	}
	public void setHeight(double setHeight) {
		height = setHeight;
	}
	public void setOccupation(String setOccupation) {
		occupation = setOccupation;
	}
	//打印
	public void printFamily() {
		System.out.println("名字:"+name);
		System.out.println("年龄:"+age+"岁");
		System.out.println("身高:"+height+"cm");
		System.out.println("职业:"+occupation);
		System.out.println();
	}
	//主方法
	public static void main(String[] args) {
		//构造对象
		Family family1 = new Family("father");
		Family family2 = new Family("mother");
		Family family3 = new Family("sister");
		Family family4 = new Family("brother");
		Family family5 = new Family("myself");
		//调用对象的成员方法
		family1.setAge(52);
		family1.setHeight(179);
		family1.setOccupation("工程师");
		family1.printFamily();
		
		family2.setAge(50);
		family2.setHeight(168);
		family2.setOccupation("家庭主妇");
		family2.printFamily();
		
		family3.setAge(25);
		family3.setHeight(167);
		family3.setOccupation("上班族");
		family3.printFamily();
		
		family4.setAge(22);
		family4.setHeight(175);
		family4.setOccupation("学生");
		family4.printFamily();
		
		family5.setAge(18);
		family5.setHeight(168);
		family5.setOccupation("学生");
		family5.printFamily();
	}

}

以上实例编译运行结果如下:

名字:father
年龄:52岁
身高:179.0cm
职业:工程师

名字:mother
年龄:50岁
身高:168.0cm
职业:家庭主妇

名字:sister
年龄:25岁
身高:167.0cm
职业:上班族

名字:brother
年龄:22岁
身高:175.0cm
职业:学生

名字:myself
年龄:18岁
身高:168.0cm
职业:学生


练习:

  • 定义一个“点”(类)用来表示三维空间的点(有三个坐标)。要求如下:
  • 1.可以生成具有特定坐标的点对象;
  • 2.提供可以设置三个坐标的方法;
  • 3.提供可以计算该“点”距原点距离的平方的方法。
class Point{
	double x,y,z;
	Point(double _x,double _y,double _z){
		x = _x;
		y = _y;
		z = _z;
	}
	void setX(double _x) {
		x = _x;
	}
	double getDistance(Point p) {
		return ((x - p.x)*(x-p.x)+(y-p.y)*(y-p.y)+(z-p.z)*(z-p.z));
	}
}

public class TestPoint {
	
	public static void main(String[] args) {
		Point p = new Point(1.0,2.0,3.0);
		Point p1 = new Point(0.0,0.0,0.0);
		System.out.println(p.getDistance(p1));
			//p((1.0-0.0)^2 +(2.0-0.0)^2 +(3.0-0.0)^2)=14.0
		p.setX(5.0);//p(5.0,2.0,3.0)
		System.out.println(p.getDistance(new Point(1.0,1.0,1.0)));
			//p((5.0-1.0)^2 +(2.0-1.0)^2 +(3.0-1.0)^2)=21.0
	}
}

以上实例编译运行结果如下:

14.0
21.0

重载(overloading)是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。

重载规则:
1.被重载的方法必须改变参数列表(参数个数或类型不一样);
2.被重载的方法可以改变返回类型;
3.被重载的方法可以改变访问修饰符;
4.被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载,无法以返回值类型作为重载函数的区分标准。

三种构造方法:

这里写图片描述

class Person{
	Person(){
		id = 0;
		age = 20;
	}
	Person(int _age){
		id = 0;
		age = _age;
	}
	Person(int _id,int _age){
		id = _id;
		age = _age;
	}

	private int id;
	private int age;
	
	public void setAge(int setAge) {
		age = setAge;
	}
	public int getAge() {
		return age;
	}
	public int getId() {
		return id;
	}

	void info() {
		System.out.println("Id=" + id);
	}
	void info(String t) {
		System.out.println(t + age);
	}
	void info(String j,String k) {
		System.out.println(j + id + "," + k + age);
	}
}

public class OverLoad {

	public static void main(String[] args) {
		Person person = new Person();//id,age已定
		Person person1 = new Person(23);//id 已定,输入age
		Person person2 = new Person(100,25);//id,age未定,输入id,age
		person.info();
		person1.info("Age2=");
		person2.info("Id3=","Age3=");
	}

}

以上实例编译运行结果如下:

Id=0
Age2=23
Id3=100,Age3=25

重写(Override)(新增)
方法的重写:
1.在子类中可以根据需要对从基类中继承来的方法进行重写。
2.重写方法必须和重写方法具有相同方法名称、参数列表和返回类型。
3.重写方法不能使用比被重写方法更严格的访问权限。
(访问权限:private<default<protected<public)
4.声明为final的方法不能被重写。
5.声明为static的方法不能被重写,但是能够被再次声明。

注意点:
方法重写的时候要把被重写的方法名复制粘贴为重写的方法名,以防方法名错误。

猜你喜欢

转载自blog.csdn.net/Zhou2016127224/article/details/82716192