Java 深入:关于Java面向对象的知识(十)

抽象

在现实中,抽象就是现实中不存在的东西
对于程序语言而言 抽象类就是只申明不实现
对于Java而言 什么可以被称之为抽象?

我们写个动物

public class Anm {
    void eat(){
        System.out.println("再吃东西");
    }
}

我们都知道 动物都可以吃东西 但是怎样吃 它是一种概念性的东西( 程序员真是狠起来连自己都杠)

对于抽象的东西 我们可以使用abstract来修饰

public abstract class Anm {
    abstract void  eat();

}

抽象成员注意这些:
1、抽象方法使用abstract来修饰 (在权限修饰符与返回修饰符之间)
2、抽象方法没有方法体
3、如果一个类里面有一个抽象的成员 那么这个类就是抽象的类 需要 abstract 来修饰
抽象的特点:
1、不能创建出具体的对象
2、抽象的类的子类必须重写抽象类的抽象方法(子类重写抽象方法之后可以不是抽象类),否则子类也必须是抽象类
3、抽象类中可以有正常的成员
抽象类的作用:
1、 抽象类可以强制要求子类必须重写什么方法(规范的作用)
2、 抽象类支持多态

小知识点
在java中 抽象类可以有构造器 虽然我们不能使用new 来直接使用抽象本类的构造器 构造抽象类的实例, 但是 在抽象类里面的构造器有一个这么巧妙的作用 规定了子类必须实现的代码

接口

接口其实是一种特殊的抽象类(所以不能实例化) 它里面的方法全部都是抽象的方法 接口使用interface申明
我们知道抽象类的作用是让派生类重写基类的抽象方法 从而达到规定哪些方法是必须重写,但是继承接口的必须是接口 接口与类之间只能是实现关系 implements
实现关系其实与继承关系是一样的 但是不能使用extends而是implements 实现了接口的类 必须重写接口的抽象方法

// 接口的定义
public interface inf_test1 {
    // 接口的方法都是抽象方法 所有可以忽略 abstract 且方法全部都是 public
    void getMoney(); // 接口的方法都是抽象的方法

}
//java类实现接口
public class useInter implements inf_test1{
    // 类实现接口

    @Override
    public void getMoney() {
        // 重写getMoney抽象方法(类使用接口的抽象方法这一种现象可以叫做实现)

    }
}

实现关系与接口关系大致一致 只不过实现是类与接口的关系 继承是类与类的关系 接口支持多态 且实现支持”多实现”

现在我们定义了四个类或接口
i - i_EatMeat - 食肉接口
方法:abstrect_eat()
i - i_Valuable - 珍稀动物接口
方法:
c - c_Animal - 动物类

class panda extends c_Animal implements i_EatMeat ,i_Valuable {
// 单继承c_Animal 类 多实现 食肉接口 珍稀动物接口
	 
}

因为接口支持多态性所以我们使用向上转型:

panda p1 = new panda();
// 简单的实例化
c_Animal p2 = new panda();
// 类的向上转型
i_EatMeat p3 = new panda();
// 接口的向上转型  

/*
站在动物的角度去思考panda对象 可以吃 可以睡 但是无法使用接口方面的方法

站在珍惜动物的角度去思考panda对象 可以保护 可以珍惜 但是不能吃 不能睡
*/

如果说 A 是 B 的话 那么 A 就是B的派生类(子类)
如果说 A 是 怎样怎样的(B) A就是B的实现类

如果有许多许多的道具都是雷属性,雷属性道具有许多特征
那么不妨将雷属性作为一个接口进行封装 给所有的雷属性道具实现这个接口

特点:
1、接口的方法都是抽象方法 并且都是公开的
2、属性必须是 公开 静态 常量

项目练习

public interface I_DataBaseManager {
    // 数据库管理接口
    public abstract void AB_SQL_ADD();// 数据库的增
    public abstract void AB_SQL_REM();// 数据库的删
    public abstract void AB_SQL_CHAGE(); // 数据库的改
    public abstract void AB_SQL_SELECT(); // 数据库的查
    public abstract void AB_CONNECT();
}

public abstract class AC_DBCRUD implements I_DataBaseManager {
    // 抽象 实现了:增删改查 抽象保留: connect


    @Override
    public void AB_SQL_ADD() {
        System.out.println("数据库在添加");
    }

    @Override
    public void AB_SQL_CHAGE() {
        System.out.println("数据库在修改");
    }

    @Override
    public void AB_SQL_REM() {
        System.out.println("数据库在删除");
    }

    @Override
    public void AB_SQL_SELECT() {
        System.out.println("数据库在查找");
    }

}

public class C_CONNECT extends AC_DBCRUD{
    String db;
    public C_CONNECT(String dbType){
        this.db = dbType;
    }

    @Override
    public void AB_CONNECT() {
        System.out.println("正在连接 "+this.db);
    }

}

public class RUN {
    public static void main(String[] args) {
        C_CONNECT mainO = new C_CONNECT("Mysql");
        mainO.AB_CONNECT();
        mainO.AB_SQL_ADD();
    }
}

object

在java中 object 是 所有类的父类

public class Test1 {
    public static void main(String[] args) {
        Object i = 2;
        i = "asd";
        System.out.println(i);
    }
}

使用object与多态

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值