Java 接口(笔记)

1. 接口

(1)概述:

(2)接口的特点

关键字Interface表示

/*
    接口关键字:interface
    接口与类之间:implement
    创建抽象接口的对象:与接口之间创建父类对象,通过重写子类的成员方法创建与接口的对象
*/

//Jumpping接口
public interface Jumpping{    //接口关键字 Interface
    public abstract void jump();    //抽象方法
}






//创建Cat类
public class Cat implements Jumpping{    //类与接口之间:关键字implements
   
     @Override
    public void jump(){
        System.out.println("猫可以跳高了");
    }
}




//测试类
public class JumppingDemo{
    public static void main(String[] args){
    //创建接口对象
        //错误的(接口为抽象的,不能被实例化)    Jumpping j = new Jumpping();
    Jumpping j = new Cat();           //多态的方法
    j.jump();

    }
}

(3)接口的成员特点

/*
    接口:
    成员变量:只能是常量(final修饰)【默认修饰符:public static final】
    接口实现类(一般为InterImpl):
    接口中的成员变量默认被final修饰,在其它类中无法直接赋值;可以通过 类.变量 直接访问
    (public static final) 成员变量直接写,如:int num3 = 30 ;

  
    
    
*/
    /*
     接口(接口主要对行为进行抽象,没有具体存在)里面不能有构造方法

    所有构造方法默认访问父类的都是无参构造

    类Object是层次结构的根,每个类都有Object作为超类(每个类都直接或间接地继承Object)

    接口(接口主要对行为进行抽象,没有具体存在)里面不能有构造方法

    */
    public class InterImple extends Object implements Inter{    

    }
    //等价于
    public class InterImpl implements Inter{

    }


    /*
    成员方法:【默认修饰符:public abstract】
    接口里面不能有非抽象方法(abstract)
    */
    //接口里面的方法默认带了 public abstract
    public abstract void method();
//等价于
    void method();

案例:猫和狗

package CatAndDog4;
//Cat类
public class Cat extends Animal implements Jumpping{
    //构造方法:无参、带参
    public Cat() {
    }
    public Cat(String name, int age) {
        super(name, age);
    }

    //成员方法:重写eat方法,重写Jump方法
    @Override
    public void eat() {
        System.out.println("猫吃东西");
    }
    @Override
    public void jump(){
        System.out.println("猫跳高");
    }

}




//Animal类
public abstract class Animal {
    //成员变量:姓名、年龄
    private String name;
    private int age;


    //构造方法:无参、带参
    public Animal() {
    }
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //成员方法:get/set方法,eat方法

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public abstract void eat();
}






//测试类
public class AnimalDemo {
    //main方法
    public static void main(String[] args){
    //创建对象,调用方法
    Jumpping j = new Cat();
    j.jump();   //接口只能调接口里面的方法
    System.out.println("-------------------");


    //法1:无参构造法
    Animal a = new Cat();
    a.setAge(18);
    a.setName("加菲");
    System.out.println(a.getName() + ", " + a.getAge());
    a.eat();    //抽象类只能调抽象类里面的方法
    System.out.println("-------------------");

        // 法2:带参构造法
    a = new Cat("加菲猫",16);
    System.out.println(a.getName() + ", " + a.getAge());
    a.eat();    //抽象类只能调抽象类里面的方法
    System.out.println("-------------------");


    //法3:这种方法最好(Cat类里面的方法最多,既是子类又有接口)
        Cat c = new Cat();
        c.setAge(18);
        c.setName("加菲猫");
        System.out.println(a.getName() + ", " + a.getAge());
        c.jump();
        c.eat();
    }
}

(4)类和接口的关系

   //接口Inter1
     public interface Inter1{

    }

    //接口Inter2
     public interface Inter2{

    }

    //接口Inter3 继承多个接口
     public interface Inter3 extends Inter1,Inter2{

    }

    //myself类继承Object类的时候实现多个接口
    public class myself extends Object implements Inter1,Inter2,Inter3{

    }

(5)抽象类和接口的区别

 

 案例:运动员和教练

 

package AthletesAndCoaches;
//说英语接口
public interface SpeakEnglish {
    //成员方法:
    public abstract void speakEnglish();

}





//抽象人类
public abstract class Person {
    //成员变量:姓名、年龄
    private String name;
    private int age;
    //构造方法(无参、带参)
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //成员方法:get/set、eat
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public abstract void eat();
}





//抽象教练类,继承人类
public abstract class Coach extends Person{

    //构造方法(无参、带参)
    public Coach() {
    }

    public Coach(String name, int age) {
        super(name, age);
    }

    //成员方法:teach()
    public abstract void teach();


}





//抽象运动员类,继承人类
public abstract class Player extends Person{        //
    //构造方法
    public Player() {
    }

    public Player(String name, int age) {
        super(name, age);
    }
    //成员方法:抽象learn()
    public abstract void learn();

}






//具体篮球运动员类,继承运动员类
public abstract class BasketballPlayer extends Player{
    //构造方法
    public BasketballPlayer() {
    }

    public BasketballPlayer(String name, int age) {
        super(name, age);
    }
    //成员方法:重写eat();重写learn()
    @Override
    public void eat(){
        System.out.println("篮球运动员在吃");
    }
    @Override
    public void learn(){
        System.out.println("篮球运动员学");
    }

}





//篮球教练类,继承教练
public class BasketballCoach extends Coach{
    //构造方法
    public BasketballCoach() {
    }

    public BasketballCoach(String name, int age) {
        super(name, age);
    }
    //成员方法;重写teach()、重写eat()
    @Override
    public void teach(){
        System.out.println("教篮球");
    }
    @Override
    public void eat(){
        System.out.println("吃篮球教练");
    }


}






//具体乒乓球教练类,继承Coach类,继承Coach接口
public class PingPangCoach extends Coach implements SpeakEnglish{
    //构造方法
    public PingPangCoach() {
    }

    public PingPangCoach(String name, int age) {
        super(name, age);
    }
    //成员方法:重写eat()、重写teach()

    @Override
    public void teach(){
        System.out.println("教乒乓球");
    }
    @Override
    public void eat(){
        System.out.println("吃乒乓球教练");
    }
    @Override
    public void speakEnglish(){
        System.out.println("乒乓球教练讲英语");
    }

}









//具体乒乓球运动员类,继承运动员类,实现说英语接口
public class PingPangPlayer extends Player implements SpeakEnglish  {
    //构造方法:无参、带参
    public PingPangPlayer() {
    }

    public PingPangPlayer(String name, int age) {
        super(name, age);
    }
    //成员方法:重写eat()、重写learn()、重写speakEnglish()
    @Override
    public void eat(){
        System.out.println("吃乒乓球运动员");
    }
    @Override
    public void learn(){
        System.out.println("乒乓球运动员学");
    }

    @Override
    public void speakEnglish() {
        System.out.println("乒乓球运动员讲英语");
    }
}









//测试类
public class Demo {
    public static void main(String[] args){
        //创建对象
        //乒乓球运动员
        PingPangPlayer ppp = new PingPangPlayer();
        ppp.setName("张继科");
        ppp.setAge(18);
        System.out.println(ppp.getName() + ppp.getAge());
        ppp.eat();
        ppp.learn();
        ppp.speakEnglish();

    }

}

























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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值