接口,多态,static关键字。

模拟公司给员工发公司



public class Test08 {
    public static void main(String[] args) {
        //6. 定义测试类,创建Company对象,Manager对象,Coder对象,调用公司paySalary方法,给Manager和Coder发工资
            Company company = new Company();
            Manager m = new Manager();
            Coder c = new Coder();
            m.setName("张三");
            m.setSalary(9999);
            c.setName("李四");
            c.setSalary(1024);
           double a = company.paySalary(m);
          double b = company.paySalary(c);
        System.out.println("给经理:" + m.getName() + "发" + m.getSalary() + "元 公司还有" + a + "元");
        System.out.println("给程序员:" + c.getName() + "发" + c.getSalary() + "元 公司还有" + b + "元");
    }
}
//定义员工Employee类。包含属性:姓名,薪资
class Employee{
    private String name;
    private double salary;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}
//2. 定义经理Manager类继承Employee类
class Manager extends Employee{

}
//3. 定义程序员Coder类继承Employee类
class Coder extends Employee{

}
//4. 定义Money接口,提供抽象方法paySalary,参数为Employee
interface Money {
    public abstract double paySalary(Employee e);
}
//5. 定义公司Company类,实现Money接口,Company类包含公司总资金属性
class Company implements Money{
    double s = 900000.0;
    @Override
    public double paySalary(Employee e) {
            s -= e.getSalary();
            return s;
    }
}

 模拟各种商品添加到购物车,电子商品打8.8折优惠,展示所有商品信息。



import java.util.ArrayList;

public class Test09 {
    public static void main(String[] args) {
        //创建购物车对象
        ShoppingCart s = new ShoppingCart();
        //创建笔记本电脑对象
        Laptop L = new Laptop();
        L.setName("笔记本");
        L.setId("g10000");
        L.setPrice(10000);
        L.show();
        //创建手机对象
        Phone2 p = new Phone2();
        p.setName("手机");
        p.setId("g10001");
        p.setPrice(5000);
        p.show();
        //创建苹果对象
        Apple ap = new Apple();
        ap.setName("苹果");
        ap.setId("g20000");
        ap.setPrice(18.88);
        ap.show();
        System.out.println("============================");
        //加入购物车
        s.addGoods(L);
        s.addGoods(p);
        s.addGoods(ap);
        //展示
        s.showGoods();
        s.total();
    }
}
//定义购物车类。
//2.使用ArrayList作为成员变量,保存各种商品对象。
//3.提供添加商品,移除商品,计算总价的方法。
class ShoppingCart{
    ArrayList<Goods> list = new ArrayList();
    //存储
        public void addGoods(Goods goods){

            list.add(goods);
}
//展示
        public void showGoods(){
            System.out.println("您选购的商品为:");
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i).getName()+ ", " +list.get(i).getId() + ", " + list.get(i).getPrice());
            }
        }
        //计算最后价格
        public void total(){

            double d = 0;
            double b = 0;
                for (int i = 0; i < list.size(); i++) {
                    d += list.get(i).getPrice();
                    if (list.get(i) instanceof Fruit){
                        b += list.get(i).getPrice();
                    }
            }
            System.out.println("======================================");
            System.out.println("原价为:" + d + "元");
            System.out.println("打完折:" + ((d-b)*0.88+b) + "元");
        }
}
//4.定义商品类Goods,包含商品名称,id,价格等属性。
class Goods{
    private String id;
    private String name;
    private double price;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}
//5.定义电子商品类EGoods继承Goods。
class EGoods extends Goods{

}
//6.定义笔记本类Laptop继承电子商品EGoods类。
class Laptop extends EGoods{
public void show (){
    System.out.println("加入笔记本成功");
}
}
//7.定义手机类继承继承电子商品EGoods类类。
class Phone2 extends EGoods{
    public void show (){
        System.out.println("加入手机成功");
    }
}
//8.定义水果类Fruit继承商品类。
class Fruit extends Goods{

}
//9.定义苹果类继承水果类
class Apple extends Fruit{
    public void show (){
        System.out.println("加入苹果成功");
    }
}

static 关键字可以用于修饰类的成员变量、成员方法、代码块和内部类,被 static 修饰的成员称为静态成员。

静态成员属于类,不属于对象。我们可以在不创建对象的情况下,直接通过类访问静态成员。

静态成员的好处

    - 全局的,可以被所有对象所共享,在内存中只存储一份,更节省内存空间。

    - 可以直接通过类访问而不用创建对象,编码效率更高。

静态成员的缺点

    - 静态成员是属于类的,类不被卸载,静态成员就一直存在。而实例成员会随着对象的销毁一并被 GC 回收。

接口关键字interface。实现接口关键字implements。

接口中可以定义的成员

    - 常量  使用 public static final 修饰

    - 抽象方法  使用 public abstract 修饰

    - 默认方法  使用 public default 修饰(JDK8+

    - 静态方法  使用 public static 修饰(JDK8+

接口中不能定义的成员

    - 构造方法(接口不能创建对象,也没有成员变量需要初始化)

    - 静态代码块(技术上可以做到,但没有这样的需求,在接口中定义静态代码块没有意义)

多态的前提条件

    - 继承或实现关系(二选一)

    - 方法的重写(子类重写方法才能有不同的表现形式)

    - 父类引用指向子类对象(多态的语法格式)父类 对象名 = new 子类;

多态的好处是提升了代码的扩展性和复用性

    - 扩展性:以返回值多态为例,如果有新的子类出现,方法的返回值类型和方法的调用者无需做任何修改。

    - 复用性:以参数多态为例,调用方法可以传递该类及其所有子类对象,无需针对多个类编写多个方法。

态的弊端是无法调用子类特有的方法。

解决弊端的方法:强制类型转换(向下转型)。

格式:子类 对象名 = (子类)父类类型对象;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值