今天看的视频比较少,主要是打打代码巩固一下之前学到的知识,今天学到的新知识主要是方法的重载。
回顾:访问实例变量和调用成员方法。
一、
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的方法不能被重写,但是能够被再次声明。
注意点:
方法重写的时候要把被重写的方法名复制粘贴为重写的方法名,以防方法名错误。