Java的接口类型

接口)

标签: java

内部类
1)成员内部类
1.1)编写在类的成员位置
1.2)外部类的私有属性,内部类可以访问
内部类的私有属性,
外部类也可以实例化对象调用
1.3)当内部类和外部类有同名成员时
在内部类中使用
Outer.this.成员的方式指定外部类成员
1.4)所有内部类都有独立的class文件

2)匿名内部类
2.1)匿名内部类通常编写在方法中
2.2)匿名内部类必须通过继承一个父类
或实现一个接口来编写
2.3)匿名内部类也可以访问外部类的私有成员
匿名内部类也是使用
Outer.this.xxx来调用重名成员的
2.4)匿名内部类使用它所在的方法的
局部变量时
1.不能修改
2.该局部变量只能被赋值一次
计时器
1)编写的步骤
1.1)实例化计时器对象(java.util.Timer)
1.2)使用匿名内部类,实现一个TimerTask的
子类
并在匿名内部类中重写run方法
1.3)使用计时器对象调用
task对象中的run方法,并设置运行间隔

#接口
##1.什么是接口
java中的接口是一种特殊的数据类型
类似于生活中的一种能力,人的能力之类的

##2.为什么需要接口
使用接口能实现java中的多继承
一个类除了继承父类的能力,还想有其他很多公有的能力
相当于认另外的干爹,可以实现多继承的能力
java语言是一个单继承语言,使用接口可以曲线救国,实现“多继承”

##3.怎么定义一个接口
在一个java文件中
interface 接口名{
}
就是把class替换成interface
新建的为class,进去再改成interface都行

##4.接口的特征
可以暂时理解为(只有抽象方法的抽象类)
4.1 接口中的所有属性都是:
公有静态常量
4.2 接口中的所有方法都是:
公有抽象方法
4.3 接口中不允许有构造方法
子类的构造只能调用父类的,不能调用接口的,所以接口不需要也没有构造
4.4 接口不能实例化
eg:

    public interface Aoo {
	//所有属性都有公有静态常量,不是默认,是就是这个类型,不能改成其他类型
	int NUM = 100;
	//编译时会变成 (相当于)
	//public static final int NUM = 100;
	
	//所有方法都是公有抽象方法,不是默认,是就是这个类型,不能改成其他类型
	void abc();
	//编译时会变成(相当于)
	//public abstract void abc();
}

##5.编写类实现接口
(注意说法:实现接口、继承父类)
5.1 在类名后通过
implements关键字实现接口
5.2 一个类可以实现多个接口
接口名用“,”分割
5.3 如果该类继承了父类
应该在父类名后编写implements关键字
先继承父类,再实现接口
5.4 实现接口的子类,必须重写
接口中的所有方法
除非这个实现类是抽象类
eg:

public class Child extends Father implements Aoo,Boo{
	@Override
	public void abc() {
		// TODO Auto-generated method stub
		
	}
}
//这个实现的类为抽象类,则不需要实现接口(或抽象父类中的)方法
//public abstract class Child extends Father implements Aoo,Boo{}

##6.接口类型的使用
6.1 通常情况下
接口也是向上造型的类型
Aoo a=new Child();
实现类对象赋给接口类型引用
接口类型的引用
只能调用到接口中声明的方法,不能调用子类独有的方法(除非强转)
6.2 接口类型也可以使用匿名内部类实现
eg:

//匿名内部类实现接口
Aoo a = new Aoo(){
	@Override
	public void abc() {
	}
};

##7.接口的注意事项
7.1 接口也可以继承接口
使用 extends 关键字(只有类实现接口时才用implements)
多个接口用,分割
子接口的实现类需要重写:子接口和其父接口中的所用方法
7.2 接口和实现类应该是has-a的关系有一个
7.3 接口方法同名
eg:

  public interface Coo extends Aoo,Boo{
	@Override
	default void abc() {
	}
}

##8.理解接口的含义
接口代表一种能力
实现接口的同时就代表这个类型的对象拥有了这种能力

##9.接口的意义
9.1 使java程序间接实现了多继承
9.2 接口更加直接的,设计了整个程序的结构,方便程序的扩展和维护
9.3 程序的设计人员可以通过面向接口编程,减少设计工作的复杂度

#一些小练习
1.定义一个抽象类Bird,其中包含
年龄和性别属性和抽象的eat(吃)方法
2.定义两个接口
飞(Fly)接口中有方法void fly();
游泳(Swimming)接口中有方法 void swim();
//不是所有鸟都会飞或者游泳,子类会哪个能力就实现哪个能力的接口
3.定义一个子类(实现类)Duck(鸭子)
继承鸟,实现飞和游泳
定义一个子类(实现类)Magpie(喜鹊)
继承鸟,实现飞
4.在创建测试类
将鸭子对象赋给Swimming类型,调用swim方法
将喜鹊对象赋给Fly类型,调用fly方法
代码

class 鸟{
	
}
class XX鸟 extends 鸟 implements 飞,游泳{
}
class XX鸟 extends 鸟 implements 飞{
}
class XX鸟 extends 鸟{
}

每个人都是这个人类型的唯一对象

public class ZhangSan extends Person
implements Driver,Swimming,Cooking
{
}

我们工作中的接口的形态
public interface 用户管理{
 
    //这个方法用于用户登录
    //username是用户名
    //pwd是密码
    //登录成功,返回用户对象
    void User login(String username,
                          String pwd);

}

public class 用户管理实现类 
             implements 用户管理 {
   void User login(String username,
                          String pwd){	  
     .....			  	  
   }

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值