1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性多态存在的三个必要条件继承重写父类引用指向子类对象
5.接口

接口可以理解为一种特殊的类,由全局常量和公共抽象方法组成。
类是一种具体的实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法实现细节,它只规定这些类里必须提供某些方法

1.接口的定义
和类的定义不同,接口的定义不在使用class关键字,而是使用interface关键字。
2.接口的基本语法

图片 1

image.png

注意:接口一般是用来被继承和被实现的,修饰符一般用public,接口中的1.属性是常量,即使定义时不添加
public static final ,系统也会自动加上。
2.接口中的方法只能是抽象方法,在使用时即使不添加public abstract
,系统也会自动加上。
3.接口也是抽象的在修饰符后面需要加上abstract,如果不加系统会给我们自动加上。

3.使用接口
一个类可以实现一个或多个接口,实现一个接口用implements关键字,java中一个类只能继承一个父类,不够灵活,通过多个接口可以做补充。

图片 2

image.png

而多态特性的存在有三个先决条件:

多态的优点

4.抽象类图形分析

图片 3

image.png

可以定义一个Telphone抽象类,用CellPhone和Smartphone继承抽象类。

抽象类
package com.xhouxiang;

public abstract class TelePhone {
    public abstract void message();
    public abstract void tell();
}
CellPhone继承
package com.xhouxiang;

public class CellPhone extends TelePhone {

    @Override
    public void message() {
        // TODO Auto-generated method stub
        System.out.println("通过键盘发短信");
    }

    @Override
    public void tell() {
        // TODO Auto-generated method stub
        System.out.println("通过键盘打电话");
    }

}
SmartPhone继承
package com.xhouxiang;

public class SmartPhone extends TelePhone {

    @Override
    public void message() {
        // TODO Auto-generated method stub
        System.out.println("通过语音发短信");
    }

    @Override
    public void tell() {
        // TODO Auto-generated method stub
        System.out.println("通过语音打电话");
    }

}
主函数
package com.xhouxiang;

public class initialmian {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        CellPhone obj1=new CellPhone();
        SmartPhone obj2=new SmartPhone();
        obj1.message();
        obj1.tell();
        obj2.message();
        obj2.tell();
    }

}
A、继承:父类和子类必须要有继承关系;

图片 4image.png图片 5image.png

2.方法的多态

1.创建本类对象时,调用的方法为本类的方法。
2.创建子类对象时,调用的方法为子类重写的方法或继承的方法

父类
package com.imooc;

public class Animal {
    public int age=10;
    public String name;
    public void eat(){
        System.out.println("动物具有吃的能力");
    }
}
子类
package com.imooc;

public class Dog extends Animal {
        public int age=20;
        public void eat(){
            System.out.println("狗爱吃骨头");
        }
        public void method(){
            System.out.println(age);
            System.out.println(super.age);

        }
}
主方法
package com.imooc;

public class Initial {

    public static void main(String[] args) {


        Animal obj1=new Animal(); //父类的引用可以指向本类的对象
        Animal obj2= new Dog(); //父类的引用可以指向子类的对象
        obj1.eat(); //调用本类中的方法
        obj2.eat(); //调用的方法为子类重写的方法或继承的方法
        obj2.method();//不能调用子类中独有的方法 ,错误写法
    }

}
B、重写:子类必须重写父类的成员(静态成员归类管理,对象不能引用);

发表评论

电子邮件地址不会被公开。 必填项已用*标注