package com.aaa.zxf.ajax.test;
import org.junit.Test;
/**
* 一、java中的接口
* java只能单继承。--------->接口可以多实现。
* 接口是一个特殊的抽象类,接口中的方法都是抽象的。 接口和类的关系叫做多实现。
*
*
* 2.1.2 接口的特性
A 接口中的方法都是 公共抽象的
B 接口中的成员变量都是 public static final 修饰常量 (作业:枚举)
C 接口没有构造函数 所以不能new(没有创建接口一说)
D 类接接口之间的关系
类 类 单继承
类 接口 多实现
接口 接口 多继承
E 接口的作用 接口多态 。
接口类型 变量名 = new 实现类();
*
* 二、static 关键字?
*
* 1.静态变量和静态方法。
* static修饰成员变量 称之为 静态变量
* static 修饰方法 称之为 静态方法
*
*
* 2.java中成员变量和方法的调用规则
* 如果成员变量声明的时候添加static 称之为静态变量,如果没有没有添加称之为成员变量或者 非静态变量
*
* 静态变量: 类名.静态变量名
* 非静态成员变量: 对象名.变量名
*
* 如果方法添加static 称之为 静态方法,如果不添加 称之为 非静态方法。
* 静态方法: 类名.方法名()
* 非静态方法: 对象名.方法名()
*
* 2. static关键字的作用
* (static修饰的成员变量属于类级别
* 非static修饰的成员变量属于 对象级别)
*
*
* 三、 final关键字
*
* 1.final修饰特性
*
* A final 修饰类: final修饰的类不能被其他类继承 (不能有子类)
* The type Cat cannot subclass the final class Animal
*
* 面试题:String能不能被继承?为什么? String为什么设计成final class?
* 不能, string 被 final 修饰。
* 所以String是不可变的关键都在底层的实现,而不是一个final。考验的是工程师构造数据类型,封装数据的功力。
*
*
* B final 修饰成员变量 :final修饰的成员变量都是 常量(只能赋值一次 之后不能修改了)
*
* 2. 静态常量和非静态常量
* 静态常量(static final):初始化的时候(声明的时候)或者在静态代码块中赋值(静态代码块 就是一个写代码的地方 写到静态代码块的代码 随之类被加载 只执行一次)
*
* 非静态常量(final):初始化的时候(声明的时候)或者在 构造函数中初始化
3.final 修饰的方法?
final修饰的方法 可以被调用 但是不能被子类重写
Cannot override the final method from People
4.为什么使用final关键字?
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
*/
public class JavaJieKou {
public static void main(String[] args) {
String h= "sadf";
People01 小明 = new People01();
/**
* 都实现了 Irun 这个接口
*
* 人 需要实现什么功能 直接调用即可。
* 直接调用即可。
*
* people 遛马的方法
*/
Irun hourse = new Hourse01();
Ieat hourse1 = new Hourse01();
Irun bird = new Bird();
小明.run(hourse);
小明.feed(hourse1);
小明.run(bird);
}
@Test
public void test01(){
/**
* people 喂养的方法。
*/
People01 people01 = new People01();
Ieat hourse01 = new Hourse01();
Ieat bird = new Bird();
people01.feed(hourse01);
people01.feed(bird);
}
}
// 定义一个接口 关键字 interface 修饰类名。
interface Irun{
/**
* 接口中的方法 都是公共的抽象的方法
*/
void run();
}
interface Ieat{
void eat();
}
// 普通类的多实现 实现run 和 eat 两个接口的功能。
class Hourse01 implements Irun,Ieat{
@Override
public void run() {
System.out.println("马飞飞");
}
@Override
public void eat() {
System.out.println("马 吃草。。。");
}
}
class Bird implements Irun,Ieat{
@Override
public void run() {
System.out.println("飞翔吧,小鸟。");
}
@Override
public void eat() {
System.out.println("小鸟吃虫子!!!");
}
}
class People01{
/**
* 传递的类型是 Ieat 只要是ieat的实现类 都可以当做参数传过来。
* @param e
*/
public void feed(Ieat e){
e.eat();
}
public void run(Irun r){
r.run();
}
}