Java面向对象之抽象-接口

抽象

什么是抽象

举例:
          将猫和狗的共性内容,抽取到了动物(本身就是统称,概括性的)了中,比如:吃和睡的功能,但是在动物了中将吃和睡给出了具体体现,只有看到具体的事物才能知道它具体吃和睡的行为!所以在父类将这些行为,只是给出一个方法声明即可!
仅仅给出方法的声明---->含义没有方法体{},抽象功能---->

      有抽象的方法的必须为抽象类
      抽象类中不一定都是抽象方法!(部分的功能,抽象功能,必须让子类必须重写!)

抽象方法(成员方法)的格式:
      权限修饰符 abstract 返回值类型 方法名(空参/带参) ;

抽象类的本质:
      强制子类必须将父类的所有的抽象方法,必须实现(重写)
抽象类的特点:
	1)不能实例化(不能new 创建对象)
    2)抽象类的子类一定有具体类,否则无法进行实例化的!

抽象类的成员特点:

    1)成员变量:
        可以是变量也可以自定义的常量
   	2)成员方法
        既可以有抽象方法,也可以有非抽象方法!
   	3)构造方法
        还存在继承关系,分层初始化--->先父类构造初始化,然后是子类构造初始化!
        无参构造方法/有参构造方法都可以存在,目的都是为了数据进行初始化!

抽象abstract关键字不能和哪些关键字共存?

abstract不能和private共用:
          被private修饰的只能在当前类访问,而abstract修饰的方法,它需要强制子类进行重写;
abstract不能和static共用:
          abstract修饰的成员方法,需要被子类重写,还是抽象类多态进行实例化Fu fu = new Zi() ;
          而static随着类的加载而加载(静态方法算不上重写),跟类相关的! 
          abstract不能和final共用:
          被final修饰的成员方法不能被重写,而abstract修饰的成员方法,强转子类重写!


           abstract:用在类上,标记这个类----抽象类
                    用在方法上,标记这个方法是一个抽象方法!
                    结合public使用居多

接口

举例:
猫或者狗本身这个事物不具备"跳高"的功能,经过后天 驯养员的培养,猫和狗就具备了"跳高的功能"

接口体现的是这个事物本身不具备的功能,是一种额外的扩展功能! 只要这个事物实现了接口,它就具备这个功能!
      
		

如何定义接口

java定义接口
      interface  接口名{}

      接口的子类(子实现类) implements  接口名{
          强制子实现类必须将接口中所有抽象方法必须重写!(实现)
      }

接口的特点:

			1)接口不能实例化(不能创建对象)
           	2)接口如何实例化?
                 接口多态
                 接口名 对象名  = new 接口的子实现类名() ;  (前提:子实现类是非抽象的,就是一个具体类)
开发中:
  接口名和子实现类的命名规范(开发项目中)
      举例:
          接口名:  interface Inter{}
          接口的子实现类命名: 接口名 +Impl
                  class InterImpl implements Inter{}

接口中的成员特点:

               成员变量:只能是常量 存在默认修饰符 public static final
               成员方法:(非静态):只能是抽象方法,存在默认修饰符 public abstract
                               在接口中是可以定义静态方法,必须有方法体(特例)
               构造方法:  没有构造方法!  因为子实现类和接口的关系是implements实现关系,
                         只是将接口暴露的额外功能进行实现
interface Inter{
      /*public Inter(){

      }*/
//    public int num = 10 ;
    public static final int num = 10 ;
    //public static int num2 = 20 ;
    public static final int num2 = 20 ;
    /*void show(){//接口只能抽象方法

    }*/
    public abstract  void show() ;
    void show3() ;

    //静态方法
    public  static void show2(){
        System.out.println("show2()...");
    }
}
//接口的子实现类 InterImpl实现Inter接口
class InterImpl implements  Inter{
        int num = 100 ;

    @Override
    public void show() {
        System.out.println("show InterImpl");
    }

    @Override
    public void show3() {
        System.out.println("show3 InterImpl");
    }
}


//测试类
public class InterfaceDemo2 {
    public static void main(String[] args) {
        //接口多态的测试
        Inter inter = new InterImpl() ;
        System.out.println(inter.num) ;//多态的成员变量的访问
        System.out.println(Inter.num);
       // inter.num = 200 ;
        System.out.println(Inter.num2) ;
        //inter.num2 = 300 ;  final修饰的变量是一个常量,不能在赋值
        Inter.show2();
    }
}

在Java中

       类与类:
               继承关系,extends,而且只支持单继承,不支持多继承,但是可以多层继承!
       类与接口
               实现关系,implements,而且一个类继承另一个类的同时,是可以实现多个接口的!接口名和接口名直接逗号隔开
                   class LoverImpl extends Lover implements  Love,Study{
       接口与接口
               继承关系,extends,不仅支持单继承,也支持多继承,也可以多层继承
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小周不要掉头发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值