实验内容:
抽象类:
package exercise;
public abstract class Shape {
public abstract double getArea();
}
三角形:
package exercise;
public class Delta extends Shape {
private double a;
private double b;
private double c;
public Delta(double a,double b,double c) {
this.setA(a);
this.setB(b);
this.setC(c);
}
public void setA(double a) {
this.a=a;
}
public double getA() {
return a;
}
public void setB(double b) {
this.b=b;
}
public double get() {
return b;
}
public void setC(double c) {
this.c=c;
}
public double getC() {
return c;
}
public double getArea() {
return Math.sqrt((a+b+c)/2*((a+b+c)/2-a)*((a+b+c)/2-b)*((a+b+c)/2-c));
}
}
圆:
package exercise;
public class Round extends Shape {
private double radius;
public Round(double radius) {
this.setRadius(radius);
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public double getArea() {
return Math.PI * Math.pow(radius, 2);
}
}
矩形:
package exercise;
public class Rectangle extends Shape {
private double hight;
private double width;
public Rectangle(double width, double hight) {
this.setWidth(width);
this.setHight(hight);
}
public void setWidth(double width) {
this.width = width;
}
public double getWidth() {
return width;
}
public void setHight(double hight) {
this.hight = hight;
}
public double getArea() {
return hight * width;
}
}
测试类:
package exercise;
public class text {
public static void main(String[] args) {
Shape rectangle1 = new Rectangle(30,30);
Shape delta1 = new Delta(3,4,5);
Shape round1 = new Round(20);
System.out.println("矩形的面积:"+rectangle1.getArea());
System.out.println("三角形的面积:"+delta1.getArea());
System.out.println("圆的面积:"+round1.getArea());
}
}
运行结果:
遇到的问题:求三角形面积时,给的sqrt函数总是报错,然后一直找不出来问题,百度之后,发现要用Math.sqrt就好了,而且圆周率是Math.pI,涨知识了。还有在继承抽象类时,总是会出现重名的情况,就是普通的一个类也会有,看书后才知道,原来所有的没有明确父类的,都是继承的Object类。
实验2:
抽象类:
package exercise;
public interface Shape1 {
public abstract double getArea();
public abstract double getPerimeter();
}
class Factory {
public static Shape1 getInstance(String name) {
Shape1 s = null;
if ("Round1".equals(name)) {
s = new Round1(30);
}
if ("Steep".equals(name)) {
s = new Steep(30);
}
return s;
}
}
直线类
package exercise;
public class Steep implements Shape1 {
private double hight;
public Steep(double hight) {
this.setHight(hight);
}
public void setHight(double hight) {
this.hight = hight;
}
public double getHight() {
return hight;
}
public double getPerimeter() {
return this.hight;
}
public double getArea() {
return 0;
}
}
圆类
package exercise;
public class Round1 implements Shape1 {
private double radius;
public Round1() {
}
public Round1(double radius) {
this.setRadius(radius);
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public double getArea() {
return Math.PI * Math.pow(radius, 2);
}
public double getPerimeter() {
return Math.PI * 2 * radius;
}
}
测试类
package exercise;
public class test {
public static void main(String[] args) {
Shape1 c = new Round1(30);
Shape1 s = new Steep(30);
System.out.println("圆的面积:" + c.getArea());
System.out.println("圆的周长:" + c.getPerimeter());
System.out.println("直线的周长:" + s.getPerimeter());
}
}
运行结果
遇到的问题:在刚开始看题目的时候就觉得奇怪,直线怎么样求大小呢?让我十分迷惑,然后我就只有求了一个周长。还有在实现接口后的类中的实例化,遇到了一些问题,如果像工厂一样的实例化方法,那么可不可以在进行赋值呢?在经过我的测试以后,发现是不行的,因为早已经实例化了,赋值也完成了,所以对于这个题目就只能采用直接实例化了,因为要进行赋值。
学习总结
Object类:
toString方法:
1、java语言很多地方会默认调用对象的toString方法。
如果不重写toString方法,将会 使用Object的toString方法,其逻辑为 类名@散列码,toString方法是非常有用的调试工具,如果重写了toString方法,调试时断电到对象会显示出对象各个属性及其值,如果不重写则显示 类名@散列码
所以最好是为自己定义的每个类加toString方法
eg:字符串+对象 ,自动调用对象的toString方法。
eg:system.out.print(任意对象) 自动调用对象的toSt方法。
equals方法:
1、equals()是Object中的方法,作用在于检测一个对象是否等于另一个对象。
2、在Object类中equals()方法是判断两个对象是否有相同的引用 ,即是否是相同的对象。
3、String重写equals()方法,String的equals()方法用途比较两个字符对象的字符序列是否相同
作者:xudo~
出处:https://www.cnblogs.com/xudo/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具