JAVA中方法覆盖,看这篇就够了

365bet娱乐平台 📅 2025-11-09 06:46:06 👤 admin 👀 5578 ❤️ 117
JAVA中方法覆盖,看这篇就够了

方法覆盖

1、方法覆盖又被称为方法重写

2、什么时候使用方法重写?

当父类中的方法已经无法满足当前子类的业务需求;

子类有必要将父类中继承过来的方法进行重新编写;

3、代码需要满足什么条件才能构成方法覆盖?

(1)方法重写发生在具有继承关系的父子类之间;

(2)方法重写的时候:方法名相同、返回值类型相同、形参列表相同;

(3)方法重写的时候:访问权限不能更低,可以更高;【public>protect>private】

(4)方法重写的时候:抛出异常不能更多,可以更少;

4、建议方法重写的时候尽量复制粘贴!(因为容易出错,导致没有产生覆盖)

(第四点特别需要注意,我在写的时候找这个错误找了半天)

5、注意:

(1)私有方法不能继承,所以不能覆盖

(2)构造方法不能继承,所以不能覆盖

(3)静态方法不存在覆盖

(4)覆盖只针对方法,不谈属性

题目要求:

前提:先是有一个一个两点之间求距离的函数 Point2d,以此为父类派生出各个子类

1. Point3d

Point3d用于描述三维坐标点

(1)增加Z坐标

(2)覆盖toString()方法,输出三维坐标

(3)覆盖distance()方法,计算三维坐标点之间的距离

(4)定义有参数的构造方法,利用super调用父类构造方法

2. Circle

Circle用于描述二维的圆,圆可以看作是一个点和一个半径

(1)增加半径

(2)增加计算面积的方法

(3)覆盖toString方法

(4)定义有参数的构造方法,利用super调用父类构造方法

3. Line

Line用于描述平面的直线,y = k * x + b

(1)增加k,b

(2)覆盖toString方法

(3)定义有参数的构造方法,利用super调用父类构造方法

*补充:直线只要再增加一个斜率就可以了,输出的时候,要以:y=kx+b的形式输出*

4. 定义Test类,进行测试

(1)定义main方法,测试定义的类

(2)定义方法:void show(Point2d point),

传递不同的子类对象,在该方法中调用toString,查看输出结果。

class Point2d

{

int x=0;

int y=0;

Point2d()

{

x=y=0;

}

Point2d(int x,int y)

{

this.x=x;

this.y=y;

}

public String toString()

{

return "(" + x +"." + y +")";

}

public double distance(Point2d point)

{

int delX = x - point.x;

int delY = y - point.y;

return Math.sqrt(delX*delX + delY*delY);

}

}

class Point3d extends Point2d

{

int z = 0;

Point3d()

{

z=0;

}

Point3d(int x,int y,int z)

{

super(x,y);

this.z=z;

}

public String toString()

{

return "(" + x + "," + y + "," + z+")" ;

}

public double distance(Point2d point)

{

int delX = 0;

int delY = 0;

int delZ = 0;

if(point instanceof Point3d)

{

delX = x - point.x;

delY = y - point.y;

delZ = z - ((Point3d)point).z;

}

else

{

delX = x - point.x;

delY = y - point.y;

delZ = z;

}

return Math.sqrt(delX*delX+delY*delY+delZ*delZ);

}

}

class Circle extends Point2d

{

double radius = 0.0;

Circle()

{

radius=0.0;

}

Circle(int x,int y,double radius)

{

super(x,y);

this.radius = radius;

}

public String toString()

{

return "( x-" + x + ")^2 + ( y -" + y + ")^2=" + radius*radius;

}

public double area()

{

return 3.14 * radius * radius;

}

}

public class D {

public static void main(String[] args)

{

Point2d p1 = new Point2d(1,1);

Point2d p2 = new Point2d(2,2);

System.out.println(p1.toString());

System.out.println(p1.distance(p2));

Point3d p3 = new Point3d(3,6,7);

Point3d p4 = new Point3d(4,4,10);

System.out.println(p3.toString());

System.out.println (p3.distance(p1));

Circle c = new Circle(2,8,9);

System.out.println (c.toString());

System.out.println (c.area());

}

}

执行结果:

恭喜你,看到了这里:

下面是老师留给我们的小作业,接着来看吧!

3. Line

Line用于描述平面的直线,y = k * x + b

(1)增加k,b

(2)覆盖toString方法

(3)定义有参数的构造方法,利用super调用父类构造方法

*补充:直线只要再增加一个斜率就可以了,输出的时候,要以:y=kx+b的形式输出*

4,定义Test类,进行测试

(1)定义main方法,测试定义的类

(2)定义方法:void show(Point2d point),

传递不同的子类对象,在该方法中调用toString,查看输出结果。

class Point2d

{

int x=0;

int y=0;

Point2d()

{

x=y=0;

}

Point2d(int x,int y)

{

this.x=x;

this.y=y;

}

public String toString()

{

return "(" + x +"." + y +")";

}

public double distance(Point2d point)

{

int delX = x - point.x;

int delY = y - point.y;

return Math.sqrt(delX*delX + delY*delY);

}

}

class Zhixian extends Point2d

{

double k = 0.0;

double b = 0.0;

Zhixian()

{

k=0.0;

}

Zhixian(int x,int y,double k)

{

super(x,y);

this.k = k;

}

public double gongshi()

{

b = y - k*x;

return b;

}

public String toString()

{

return "y" + "=" + k+"x"+ "+" +b;

}

}

public class E {

public static void main(String[] arg)

{

Zhixian L1 = new Zhixian(10,10,3.0);

System.out.println(L1.gongshi());

System.out.println(L1.toString());

}

}

执行结果:

🍵 相关养生推荐