卡码java基础课 | 21.图形的面积(面向对象)

学习内容:
面向对象的特性,封装、继承、多态。

重点归纳:
成员变量的定义:访问修饰符、数据类型、变量名。访问修饰符,private只能类内部使用,protected只能类内部和子类使用,public可以从任何地方访问。
方法:访问修饰符、返回类型、方法名、参数列表。以及构造函数。
1.封装:通过将属性设置为private私有,然后通过定义方法来查看或者修改属性,达到隐藏对象中不希望被外部直接访问的属性,只能用接口来交互。
2.继承:子类可以继承父类的所有属性和方法,也可以对子类进行扩展。例如Person是父类,Teacher也属于Person,Teacher可以继承Person。继承用extends来表示。
在子类的实现过程中,super代表父类,super()表示父类的构造函数,super.xxx表示父类的属性或方法,@Override表示重写父类的方法,用这个表示验证,防止出错。
3.抽象类:比较抽象的概念,比如Shape(并不是一种具体的图形),用abstract来声明,不能实例化,类中包含一些通用的属性和方法,抽象方法也用abstract,没有具体的实现,只是定义方法名称、参数和返回类型,由子类去实现。
4.多态:父类引用指向子类对象,如Shape myCircle = new Circle(5),double circleArea = myCircle.calculateArea();Shape myRectangle = new Rectangle(4, 6),
double rectangleArea = myRectangle.calculateArea();虽然方法名称相同,但实际调用的方法是根据对象的类型动态确定的。通俗来讲,这样就能在对象多的时候,知道父类是哪个,不至于混乱。

例题:

解:

点击查看代码
import java.util.Scanner;

abstract class Shape{
    private String type;
    
    public abstract double calculateArea();
    
    public String GetType(){
        return this.type;
    }
}

class Rectangle extends Shape{
    
    private double length;
    private double width;
    
    public Rectangle(double length, double width){
        super.type = "Rectangle";
        this.length = length;
        this.width = width;
    }
    
    @Override
    public double calculateArea(){
        return length * width;
    }
}

class Circle extends Shape{
    
    private double radius;
    
    public Circle(double radius){
        super.type = "Circle";
        this.radius = radius;
    }
    
    @Override
    public double calculateArea(){
        return 3.14 * Math.pow(radius, 2);
    }
}

public class Main{
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        
        while(sc.hasNext()){
            String info = sc.next();
            if(info.equals("rectangle")){
                String length = sc.next();
                double l = Double.parseDouble(length);
                String width = sc.next();
                double w = Double.parseDouble(width);
                Shape Rec = new Rectangle(l, w);
                System.out.format("Rectangle area: %.2f\n", Rec.calculateArea());
            }
            else if(info.equals("circle")){
                String radius = sc.next();
                double r = Double.parseDouble(radius);
                Shape Cir = new Circle(r);
                System.out.format("Circle area: %.2f\n", Cir.calculateArea());
            }
            else{
                break;
            }
        }
        
        sc.close();
    }
}

posted @ 2024-03-26 11:28  小陈-自学记录  阅读(36)  评论(0)    收藏  举报