java面向对象第四章

一、 接口的基础知识

1、为什么需要接口

为解决实际应用中,单一继承无法解决的问题

2、什么是接口

a)   基本概念?

接口是一种特殊的抽象类

接口是一种规范和标准,可以约束类的行为,是一些方法特征集合,但方法没有方法体

b)   基本语法

访问修饰符 interface 接口名{

                           //定义 方法(没有方法体),方法的访问修饰符默认为public

                           //定义 属性(默认是公共的静态的常量)

                                                           数据类型 常量名=值;

}

访问修饰符只能为public和默认的

c)   注意事项?

1.接口命名,接口字必须和文件名相同

2.接口中的方法没有方法体

3.接口中的属性名必须大写,且要赋值

4.接口不能实例化,没有构造方法

5.接口支持多重继承,一个接口可以继承多个接口,但不能继承类

6.接口中的方法,必须被所有实现接口的类具体实现

public abstract class Handest {
        private String brand;    //品牌
        private String type;    //型号
        
        public String getBrand() {
            return brand;
        }
        
        public Handest(String brand,String type) {        //有参构造方法
            this.brand = brand;
            this.type=type;
        }
        
        public String getType() {
            return type;
        }
        
        
        public abstract void print();
        public abstract void function();
}

父类
public interface Network {
    void surf();        //上网
}

//接口2
public interface PlayWiring {
    void play();        //播放功能
}

//接口3
public interface TakePictures {
    void takePictures();        //拍照
}

//接口4
public interface VideoCall {
        void visualTelephone();        //视频电话
}
public class AptitudeHandset extends Handest implements PlayWiring,Network,TakePictures,VideoCall {

    public AptitudeHandset(String brand, String type) {
        super(brand, type);
        
    }

    @Override
    public void visualTelephone() {
        
        System.out.println("开始视频通话......");
    }

    @Override
    public void takePictures() {
        
        System.out.println("咔嚓......拍照成功");
    }

    @Override
    public void surf() {
        
        System.out.println("已启动移动网络......");
    }

    @Override
    public void play() {
        
       System.out.println("开始播放视频《小时代》......");    
    }

    @Override
    public void print() {
        
        System.out.println("这是一款型号为"+super.getType()+""+super.getBrand()+"手机:");
    }

    @Override
    public void function() {
        
        System.out.println("发送带图片与文字的信息......");
    }
    
}

子类
public static void main(String [] args){
        
        AptitudeHandset a=new AptitudeHandset("I9100","HTC");
        a.print();
        a.surf();
        a.play();
        a.takePictures();
        a.function();
        a.visualTelephone();
    }

测试类

3、一个类如何实现接口

class 类名 implements 接口名{

  //必须对接口中的方法,具体实现

}

4、一个类如何继承另外一个类,且同时实现一个接口【变相的让1个类实现多重继承】

class 子类名 extends 父类名 implements 接口1,…接口n{

}

5、接口的好处?

接口体现了约定和实现相分离的原则

弥补了Java类单一继承的不足,有利于代码的扩展和维护

6、       抽象类和接口的异同点?【常见笔试题】

相同点

  1. 1.  二者都不可以实例化
  2. 2.  二者都包含抽象方法,必须被非抽象的子类重写或实现
  3. 3.  二者都可以用来实现多态

 

不同点:

1、 抽象类只能单一继承,而接口可以支持多重继承

2、 抽象类中除抽象方法外,还可以有非抽象的方法;接口中的方法只能是抽象方法

3、 抽象类可以有构造方法,接口没有

4、 抽象类中的变量可以不赋值,接口中的变量必须赋值

5、 抽象类中可以定义静态方法,接口不可以

public abstract class Pet {
        private String name;    
        private int  health;
        private int  love;
        
        public Pet(String name,int health,int love){
            this.name=name;
            this.health=health;
            this.love =love;
        }
        public String getName() {
            return name;
        }
        
        public int getHealth() {
            return health;
        }
        
        public int getLove() {
            return love;
        }
        
        public abstract void print();
}

父类
//接口1
public interface Eatable {
    void eat();        //吃饭
}

//接口2
public interface FlyingCatchable {
    void catchingFly();        //接飞盘
}
public class Dog1 extends Pet implements Eatable,FlyingCatchable{

    public Dog1(String name, int health, int love) {
        super(name, health, love);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void print() {
        // TODO Auto-generated method stub
        System.out.println("我叫"+super.getName()+",健康值是:"+super.getHealth()+",与主人的亲密度为:"+super.getLove()+"");
    }

    @Override
    public void catchingFly() {
        // TODO Auto-generated method stub
        System.out.println("我正在和主人玩飞盘!");
    }

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("我正在吃饭!");
    }

}

子类
public class PetText {
    public static void main(String [] args){
        Dog1 d=new Dog1("好好",90 ,95);
        d.print();
        d.eat();
        d.catchingFly();
            }

  

二、  面向接口编程

1、接口表示一种能力

2、接口表示一种约定

3、面向接口编程的好处?

a)   实现接口和实现的分离

b)   可以降低代码间的耦合性

c)   提高程序的可扩展性和可维护性

原文地址:https://www.cnblogs.com/yjx4671/p/7019575.html