Day6:面向对象——接口

    1、抽象类

    /*
    抽象的特点:
    1,抽象方法没有方法体,必须由抽象关键字所修饰。
    2,抽象方法一定存在于抽象类中,必须由抽象关键字所修饰。
    3,抽象类不可以实例化。因为调用抽象方法没意义。
    4,子类必须覆盖抽象类的所有抽象方法后,子类就可以实例化。否则该子类还是抽象类。
    
    
    抽象类的常见问题:
    
    1,抽象类一定是父类吗?
        是的,因为只有子类覆盖了抽象类中的方法,才可以创建对象,去使用这些方法。
    
    2,抽象类中有构造方法吗?
        有,因为父类的构造函数可以给子类对象初始化。
        
    
    3,抽象类中一定有抽象方法吗?
        不一定。
        其实抽象类和一般类都是用来描述事物的。都有具体的属性和行为。
        不同之处:
        抽象类中可以定义抽象类方法。但是不能实例化。
        一般类中不可以定义抽象方法,但是可以实例化。
    
    
        没有抽象方法的抽象类的出现,仅仅是不让该类创建对象。
    
    
    4,抽象关键字不可以和哪些关键字共存呢?
        final:
        private:
        static:

    2、接口

    接口可以简单的理解为是一个特殊的抽象类。
    abstract class AbsDemo
    {
        abstract void show1();
        abstract void show2();
    }
    
    class Demo extends AbsDemo
    {
        void show1(){}
        void show2(){}
    }
    

      接口的思想
      1,接口是对外提供的规则。
      2,接口的出现提高功能的扩展性。
      3,接口的出现降低了耦合性。 解耦。


    //用关键字interface来定义接口。而且内中的成员就固定为几种,而且修饰符是固定的。 //接口中的成员都是public修饰的。 特点: 1,接口不可以实例化。 2,接口的子类必须覆盖接口中所有的抽象方法后,该子类才可以实例化。否则该子类是抽象类。

    抽象类其实负责的是一个体系的基本功能。
    接口负责的是额外的功能。

    
    

    抽象类和接口的区别
    1,
    抽象类和类之间存在的是继承(is a)关系,但是只能单继承。
    接口和类之间存在的是实现(like a)关系,可以多实现。

    
    

    2,
    抽象类中是可以定义非抽象方法的,提供给子类直接使用。
    接口中的方法都是抽象的,子类必须全部实现才可以使用。

     

    单继承。

    
    

    class Fu1
    {
    void show(){}
    }

    
    

    class Fu2
    {
    void show(){}
    }

    
    

    class Zi extends Fu1,Fu2//不允许。
    {
    }

     

     

    3、练习

    1,多态的好处弊端,前提。
     
    本类的引用可以指向本类的对象也可以指向其子类的对象。★★★★★
    Animal a = new Animal();
    a = new Cat();
    本类型的引用可以指向本类型的对象。
    Animal a = new Animal();
    a = new Cat();
    
    class Animal
    {
    }
    class Cat extends Animal
    {
    }
    
    2,向上转型,向下转型什么时候用,代码举例!
    class Dog extends Animal
    {
        void eat()
        {
            System.out.println("....");
        }
    }
    
    class  
    {
        public static void main(String[] args) 
        {
            System.out.println("Hello World!");
            show(new Cat());
            show(new Dog());
    
            Animal a = new Cat();
        }
    
        public static void show(Animal a)
        {
            a.eat();
        }
    }

     

    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自Who am I ?,原文地址《Day6:面向对象——接口
    标签:
    喜欢 | 0
    分享:

还没有人抢沙发呢~