美文网首页程序员
接口和抽象类

接口和抽象类

作者: 我可能是个假开发 | 来源:发表于2018-12-15 17:30 被阅读9次

接口和抽象类

一、抽象类

抽象类的应用场景:

我们在描述一类事物的时候,发现该种事物确实存在着某种行为,但是这种行为目前是不具体的,那么我们可以抽取这种行为 的声明,但是不去实现该种行为,这时候这种行为我们称作为抽象的行为,我们就需要使用抽象类。

抽象类的好处: 强制要求子类一定要实现指定的方法。

抽象类要注意的细节:

  1. 如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象的函数。
  2. 如果一个类出现了抽象的函数,那么该类也必须使用abstract修饰。
  3. 如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现。
  4. 抽象类可以存在非抽象方法,也可以存在抽象的方法.
  5. 抽象类可以不存在抽象方法的。
  6. 抽象类是不能创建对象的。
  7. 抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。

抽象类不能创建对象的原因:
因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象的对象调用抽象方法是没有任何意义的。

//动物类--->抽象类
abstract class Animal{
    
    String name;
    String  color;

    public Animal(String  name,String color){
        this.name = name;
        this.color = color;
    }
    
    //非抽象的方法
    public void eat(){
        System.out.println(name+"吃粮食");
    }
    //移动...
    public abstract void run();
}

//狗 是属于动物中一种 
class Dog extends Animal{

    public Dog(String name,String color){
        super(name,color);
    }
    public void run(){
        System.out.println(name+"吃肉");
    }
}

//鱼是属于动物中一种
class Fish extends Animal{
    public Fish(String name,String color){
        super(name,color);
    }
    public void run(){
        System.out.println(name+"吃饲料");
    }
}

class Demo{

    public static void main(String[] args) 
    {
        /*
        Dog d = new Dog("贵宾","棕色");
        d.run();

        //创建一个鱼对象
        Fish f  = new Fish("锦鲤","金黄色");
        f.run();
        */
        Animal a = new Animal();
    }
}

abstract不能与以下关键字共同修饰一个方法:

  1. abstract不能与private共同修饰一个方法。
    private修饰的只能在本类中使用,
    abstract方法是用来被子类进行重写的,有矛盾
    所有不能共存.

  2. abstract不能与static共同修饰一个方法。
    对于abstract修饰的方法没有具体的方法实现,所有不能直接调用,
    也就是说不可以与static共存。

  3. abstract不能与final共同修饰一个方法。
    final:它的作用 修饰类代表不可以继承 修饰方法不可重写
    abstract修饰类就是用来被继承的,修饰方法就是用来被重写的。

描述一个图形、圆形、 矩形三个类。不管哪种图形都会具备计算面积与周长的行为,但是每种图形计算的方式不一致。

//图形类
abstract class MyShape{ 

    String name;

    public MyShape(String name){
        this.name = name;
    }

    public  abstract void getArea();
    public abstract void getLength();
}

//圆形 是属于图形类的一种
class Circle extends MyShape{
    
    double r;
    public static final double PI = 3.14;

    public Circle(String name,double r){
        super(name);
        this.r =r;
    }

    public  void getArea(){
        System.out.println(name+"的面积是:"+PI*r*r);
    }
    
    public  void getLength(){
        System.out.println(name+"的周长是:"+2*PI*r);
    }
}

class Circle extends MyShape(){
    
    double r;
    public static final double PI=3.14;
    
    public Circle(String name,double r){
        super(name);
        this.r=r;
    }
    public void getArea(){
        System.out.println(name+"的面积是:"+PI*r*r);
    }
    public void getLength(){
        System.out.println(name+"的周长是:"+2*PI*r);
    }
}

//矩形属于图形中的一种
class Rect extends MyShape{

    int width;
    int height;

    public Rect(String name,int width, int height){
        super(name);
        this.width = width;
        this.height = height;
    }

    public  void getArea(){
        System.out.println(name+"的面积是:"+width*height);
    }
    
    public  void getLength(){
        System.out.println(name+"的周长是:"+2*(width+height));
    }
}

class Demo4 
{
    public static void main(String[] args) 
    {
        //System.out.println("Hello World!");
    
        Circle c = new Circle("圆形",4.0);
        c.getArea();
        c.getLength();

        //矩形
        Rect r = new Rect("矩形",3,4);
        r.getArea();
        r.getLength();
    
    }
}

注意:一个类最多只能有一个直接的父类,但是可以有多个间接的父类。

class Grandpa{
    String name;
}

class Father extends Grandpa{

}

class  Child extends Father{

}

class Demo
{
    public static void main(String[] args) 
    {
        Child child =new Child();
        child.name = "小红";
        System.out.println(child.name);
    }
}

二、接口

1.接口的作用

  1. 程序的解耦。(低耦合)
  2. 定义约束规范。
  3. 拓展功能。

2.接口的定义格式

interface 接口名{

}

3.接口要注意的事项

  1. 接口是一个特殊的类。
  2. 接口的成员变量默认的修饰符为: public static final 。那么也就是说接口中的成员变量都是常量。
  3. 接口中的方法都是抽象的方法,默认的修饰符为: public abstract。
  4. 接口不能创建对象。
  5. 接口是没有构造方法的。
  6. 接口是给类去实现使用的,非抽象类实现一个接口的时候,必须要把接口中所有方法全部实现。

4.实现接口的格式

class  类名 implements 接口名{

}

Demo:

interface A{

    //成员变量
    public static final int i=10;
    //成员函数
    public void print();
}

class Demo implements A{ // Demo就实现了A接口

    public static void main(String[] args) 
    {
        Demo d = new Demo();
        d.print();
    }

    //实现接口中的方法
    public void print(){
        System.out.println("这个是接口中的print方法...");
    }
}

Demo:

//普通的铅笔类
class Pencil{
    
    String name;

    public Pencil(String name){
        this.name = name;
    }

    public void write(){
        System.out.println(name+"写");
    }
}


//橡皮接口
interface Eraser{
    public void remove();
}

//带橡皮的铅笔
class PencilWithEraser extends Pencil implements Eraser {

    public PencilWithEraser(String name){
        super(name);
    }

    public void remove(){
        System.out.println("涂改");
    }
}

class Demo
{
    public static void main(String[] args) 
    {
        PencilWithEraser p = new PencilWithEraser("2B铅笔");
        p.write();
        p.remove();
    }
}

三、类与接口之间的关系

1.类与接口之间的关系:实现关系。

类与接口要注意的事项:

  1. 非抽象类实现一个接口时,必须要把接口中所有方法全部实现。
  2. 抽象类实现一个接口时,可以实现也可以不实现接口中的方法。
  3. 一个类可以实现多个接口 。

2.接口与接口之间关系: 继承关系。

接口与接口之间要注意事项:

一个接口是可以继承多个接口的。

相关文章

  • 5.5-全栈Java笔记:接口的定义和使用

    接口interface 接口的作用 为什么需要接口?接口和抽象类的区别? 接口就是比“抽象类”还“抽象”的“抽象类...

  • java的final关键字

    ——修饰类、接口和抽象类 final可以修饰方法,属性,类!但是不能修饰接口,抽象类;因为 接口和抽象类本身就是...

  • 接口和抽象类的区别

    接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类...

  • 抽象类和接口的区别

    以下两篇文章介绍了接口和抽象类的概念接口概念抽象类概念 抽象类和接口的区别: 抽象类:需要使用abstract关键...

  • 接口和抽象类

    接口和抽象类的区别? 接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制...

  • Android_开发_Day12_抽象类和接口

    Android_开发Day12抽象类和接口 目的: 知道什么是抽象类,什么是接口,学会抽象类的使用,与接口的使用。...

  • Java--接口和抽象类

    ·为什么需要接口?接口和抽象类的区别?  接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束...

  • Kotlin 零基础学习 接口和抽象类

    接口:接口就是暴露一种物体与另外一种物体沟通的方法 抽象类 接口 这么看接口和抽象类没什么区别,抽象类能干的接口也...

  • 接口,抽象类,工厂设计模式,代理模式

    一、接口的结构: 抽象方法 全局常量 最终写法: 其他内部结构内部类内部抽象类内部接口 二、接口和抽象类 抽象类可...

  • 接口跟抽象类的对比

    抽象类和接口的区别抽象类被子类继承 接口被类实现接口可以做方法生命 抽象类可以做方法生命 也可以做方法实现接口中定...

网友评论

    本文标题:接口和抽象类

    本文链接:https://www.haomeiwen.com/subject/azvahqtx.html