Java入门 面向对象(接口) (第二十一天)

什么是接口

接口是一种约定
    有些接口只有名称
 面向接口编程:
        1、关心实现类有何能力,而不关心实现细节 
        2、面向接口的约定而不考虑接口的具体实现 

接口的特性:

   1)接口不可以被实例化 

   2)实现类必须实现接口的所有方法

   3)实现类可以实现多个接口
          implements、多个接口使用逗号隔开
   4)接口中的变量都是静态常量(public static final)

使用时: public interface MyInterface {
    public void foo();//方法
    //其他方法
}
所有方法默认都是:
public abstract

在Java中,类与类之间是单根继承(一个类只能有一个直接父类)

■一个类只能继承一个类(单根继承),但是一个类可以实现多个接口,多个接口之间使用,分隔接口中的方法只能是抽象方法,默认修饰符都是public abstract

■一个类实现了一个接口,必须重写接口中的所有抽象方法,如果不重写,那么实现了类也要定义    为抽象类

■接口不能实例化,但是可以将接口的引用指向其实现类实例

■接口的变量都是静态常量,默认修饰public static final

接口中的方法都是抽象方法,默认修饰符是public abstract

      ■接口中的方法一定定义好之后就不要轻易的去修改,因为修改接口中的方法,接口的实现类都要对修改的方法进行重新操作,非常麻烦
      
      ■一个类要想新增一个功能,只需要新建一个接口,然后让这个类实现这个新建的接口就可以用这个接口定义的功能

接口的使用:

1)接口中的成员变量
       默认都是public static final的,必须显式初始化

  2)接口中的方法
       默认都是public abstract的

  3)接口没有构造方法,不能被实例化

  4)一个接口不能实现另一个接口,但可以继承多个其他接口

  5)一个类必须实现接口抽象方法(implements),除非这个类也是抽象类

接口的使用步骤:

1)编写USB接口 :根据需求设计方法
2)实现USB接口 :实现所有方法
3)使用USB接口 :用多态的方式使用

抽象类与抽象方法

抽象类VS普通类

1)抽象类不能被实例化
       但可以创建一个引用变量,其类型是一个抽象类, 指向非抽象的子类实例
2)普通类可以被实例化

抽象方法VS普通方法
1)有无方法体

抽象类与抽象方法的使用:

1)抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类

2)如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类

3)没有抽象构造方法,也没有抽象静态方法

4)抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用

抽象类与接口

抽象类VS接口

  相同点:

      1)代表系统的抽象层
      2)都不能被实例化
      3)都能包含抽象方法
               ■用于描述系统提供的服务,不必提供具体实现

  不同点:

      1)在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
              ■ 抽象类便于复用,接口便于代码维护
      2)一个类只能继承一个直接的父类,但可以实现多个接口

使用原则:

        1)接口做系统与外界交互的窗口
             ■接口提供服务
        2)接口本身一-旦制定,就不允许随意修改
        3)抽象类可完成部分功能实现,还有部分 
              功能可作为系统的扩展点

面向对象设计原则

1)多用组合,少用继承
2)针对接口编程
3)针对扩展开放,针对改变关闭

总结

◆Java中的接口
       ■属性全都是全局静态常量
       ■方法都是全局抽象方法
       ■无构造方法
◆一个类可以实现多个接口,非抽象类实现接口时必须
实现接口中的全部方法
◆抽象类利于代码复用,接口利于代码维护

接口代码:

定义一个抽象类:

package Lnterface.demo02;

public abstract class Door {
	
	//定义开、关门功能
	public abstract void openDoor();
	
	public abstract void closeDoor();	
}

定义两个接口:

package Lnterface.demo02;

public interface Lock {
	
	
	//定义锁“开锁”和“上锁”的功能
	public abstract void openLock();
	public abstract void closeLock();
	
}

 

package Lnterface.demo02;

public interface TakePhoto {
	//接口中的方法都是抽象方法,默认修饰符是public abstract
	void image();	
}

定义一个实现类:

package Lnterface.demo02;
/*
 * 一个类只能继承一个类(单根继承),但是一个类可以实现多个接口,多个接口之间使用,分隔
 * 接口中的方法只能是抽象方法,默认修饰符都是public abstract
 * 
 * 一个类实现了一个接口,必须重写接口中的所有抽象方法,如果不重写,那么实现了类也要定义为抽象类
 * 接口不能实例化,但是可以将接口的引用指向其实现类实例
 * 
 * 接口的变量都是静态常量,默认修饰修饰public static final
 * 
 */
public class AntiTheftDoor extends Door implements Lock,TakePhoto{

	@Override
	public void openDoor() {
		System.out.println("开门.......");

	}

	@Override
	public void closeDoor() {
		System.out.println("关门.......");

	}

	//重写方法
	@Override
	public void openLock() {
		System.out.println("插钥匙,左三圈,开锁");
		
	}

	@Override
	public void closeLock() {
		System.out.println("插钥匙,右三圈,关锁");
		
	}

	@Override
	public void image() {
		System.out.println("你已进入拍照监控区.....");
		
	}

}

定义一个测试类:

package Lnterface.demo02;

public class Test {

	public static void main(String[] args) {
		AntiTheftDoor atd=new AntiTheftDoor();
		atd.closeDoor();
		atd.closeLock();
		atd.image();
		System.out.println("出去玩.......");
		atd.openDoor();
		atd.image();
		atd.openLock();
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值