JAVA interface & abstract

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA interface & abstract相关的知识,希望对你有一定的参考价值。

摘要:JAVA interface & abstract


界面 & 抽象类
抽象定义:抽象就是从多个事物中将共性的,本质的内容抽取出来。
ex:?狼和狗共性都是犬科,犬科就是抽象出来的概念。鸟跟飞机都会飞,但飞的内容不同

抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。

abstract class Action
?????? abstract void fly();

抽象类特点:
1.??????????抽象方法一定在抽象类中
2.??????????抽象方法和抽象类必须被abstract关键字修饰
3.??????????抽象类不可以用new创建物,因为使用抽象方法没意义
4.??????????抽象类中的方法要被使用,必须由子类覆写所有抽象方法后,建立子类对象调用。如果子类只覆写了部分抽象方法,那该子类还是一个抽象类

抽象类和抽象方法必须用abstract关键字来修饰。
抽象方法只有方法声明,没有方法体,定义在抽象类中。格式:修饰符abstract?返回数值类型函数名(参数清单)?;抽象类不可以被产生实例,也就是不可以用new创建对象。原因如下:抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实例。例如:犬科是一个抽象的概念,真正存在的是狼和狗。而且抽象类即使创建了对象,调用抽象方法也没有意义。抽象类通过其子类产生实例,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。


特殊说明:
抽象类中也可以不用包含抽象方法,其代表的是该抽象类只是不想被实例化


界面:
interface ,界面中的成员修饰符是固定的。
成员常量:public static final
成员函数:public abstract

界面的出现将“多继承”通过另一种形式体现出来,即“多实现”。
界面是对外暴露的规则。
界面是程序的功能扩展。
界面可以用来多实现。
类与界面之间是实现关系,而且类可以继承一个类且同时实现多个界面。
界面与界面之间可以有继承关系。
定义:某一类事物的多种存在形态。

interface Person
?????? public static final int age;
?????? public abstract void say();


子类需实践界面所有方法后才可以实例化,否则子类会成为抽象类

多态:
多态的存在提高了程序的扩展性和后期可维护性
前提:需要存在继承或者实现关系,即要有覆写操作

abstract class Animal
    abstract void eat();

class Cat extends Animal
    public void eat()
        System.out.println("吃鱼");
    

class Dog extends Animal
    public void eat()
        System.out.println("吃肉");
    

class Hello
    public static void main(String[] args)
        show(new Cat());
        show(new Dog());
    
    public static void show(Animal a)
        a.eat();
    


Animal a = new Cat();??向上转型
a.eat();
若要使用Cat类独特的方法时,再使用向下转型
Cat b = (Cat)a;
向下转型后就可使用其特有的方法,即Animal类不具有的方法。而向下转型必须先要有向上转型的前提下才可以使用。

instanceof:
instanceof用来判断是否属于某一个类,可以用在向上转型后,在向下转型时是否正常

ex:
if(a instance Cat)

多态的引用:
成员方法:是看右边的类,前提是子类有覆写父类方法
成员变量:是看左边的类。
在静态方法中,是看左边的类。
ex:
class A
    int num = 1;
    void show()
        System.out.print("Function: A");
    

class B extends A
    int num = 2;
    void show()
        System.out.print("Function: B");
    


class Hello
    public static void main(String[] args)
        A a = new B();
        System.out.println(a.num);   //输出 1
        a.show();  //输出 Function: B
       
    


内部类:

  • 将一个类定义在另一个类的里面,对里面那个类就称为内部类,内部类可以直接访问外部类中的成员,包括私有成员。
  • 而外部类要访问内部类中的成员必须要建立内部类的对象。
  • 内部类定义在成员位置上可以被private static成员修饰符修饰。被static修饰的内部类只能访问外部类中的静态成员。

内部类定义在局部位置上也可以直接访问外部类中的成员。
同时可以访问所在局部中的区域变量,但必须是被final修饰的。
内部类可以继承或实现一个外部类或者界面。

格式为:
new?外部类名或者界面名()覆盖类或者界面中的代码,(也可以自订内容)
简单理解:就是建立一个建立一个带内容的外部类或者界面的子类匿名对象。
class A
    int num = 1;
    class B
        int num = 2;
    

class Hello
    public static void main(String[] args)
        A.B a = new A().new B();
        System.out.println(a.num);  //输出 2
    


原文:大专栏  JAVA interface & abstract


以上是关于JAVA interface & abstract的主要内容,如果未能解决你的问题,请参考以下文章

interface多重继承&&byte&&抽象类

JAVA静态&动态代理

2019.8.21 Class & InterFace &abstract& 属性

Abstract抽象类 && Interface接口

graphql-yoga interface && union 使用

浅谈Go语言中的结构体struct & 接口Interface & 反射