2022-7-26 第七小组 黄均睿 学习日记 (day19)抽象类、接口

目录

抽象类:abstract

 * 1.抽象类特点:

 * 2.abstract能修饰哪些结构 :类和方法

* 3.抽象方法的特点 

 * 4.接口 JDK7-JDK8有什么变化

 * 5.面试题: 

* 6.匿名实现类 

* 栈和队列

接口

课上

课下

Demo

 Demo1

 Demo2

 总结


抽象类:abstract

在JAVA里,用abstract class来定义抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

//抽象方法是在定义一种规则,由子类去遵守,子类一定要去重写抽象方法

 * 1.抽象类特点:

 1、抽象和抽象方法都需要用abstract修饰;
 2、抽象中可以没有抽象方法,但抽象方法一定在抽象中;
 3、抽象不能直接创造对象;
 4、抽象类有构造方法。

 * 2.abstract能修饰哪些结构 :类和方法

 
抽象方法必须在抽象类里,当我们定义了一个抽象类,这个抽象类中可以有哪些结构?

        属性,成员方法,构造器,抽象方法,常量

抽象类中能不能没有抽象方法? 可以,抽象类里可以没有抽象方法,但是希望你没有抽象方法时,别用抽象类

抽象类是不能被实例化的,

抽象类不能创建对象

抽象类的构造器存在的意义: 为了约定子类的构造器必须和父类要匹配

一个类如果继承了一个抽象类,就必须重写这个抽象类所有的抽象方法

* 3.抽象方法的特点 

(1)抽象方法是一个不完整的方法,没有方法体。

(2) 抽象方法一定是抽象类,抽象的类里不一定有抽象方法 (接口中的方法一定是抽象方法!)

(3)抽象方法和类都要由abstract 修饰

(4)抽象类不能通过new 来实例化,抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

 * 4.接口 JDK7-JDK8有什么变化

* JDK7之前:接口只能定义抽象方法,不能有属性,不能有方法
* JDK8之后:接口只能定义抽象方法,不能有属性,可以有默认方式和静态
* JDK7-8:默认方法,静态方法

 * 5.面试题: 

1)继承类和实现接口的异同?

实现有的,都得覆盖,继承是父类有的,可以拿来用,也可覆盖某些方法。

 2)  抽象类和接口的区别:

        默认的方法实现 抽象类可以有默认的方法实现完全是抽象的。接口根本不存在方法的实现。

        抽象类中可以有已经实现了的方法,也可以有被abstract修饰的方法(抽象方法),因为存在抽象方法,所以该类必须是抽象类。

        但是接口要求只能包含抽象方法,抽象方法是指没有实现的方法。所以就不能像抽象类那么无赖了,接口就根本不能存在方法的实现。

* 6.匿名实现类 

 没有类名的内部类,必须在创建时使用 new 语句来声明类。. 其语法形式如下:. new <类或接口> () { // 类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。. 使用匿名类可使代码更加简洁、紧凑,模块化程度更高。. 匿名类有两种实现方式:. 继承一个类,重写其方法

* 栈和队列

* 建立在两个最基础的数据结构的基础上构建的两个受限制的线性表
* 栈先到后得、后到先得,队列先到先得、后到后得
* 重点:结合多态,参数的传递,配合instanceof使用
*
* 能够使用多态表示对象的时候,尽量使用多态
*

接口

课上

* 接口
* 比抽象类更高级的抽象。
* 声明:使用interface关键字,public interface Ch02
* JDK7之前:接口只能定义抽象方法,不能有属性,不能有方法
* JDK8之后:接口只能定义抽象方法,不能有属性,可以有默认方式和静态
* JDK7-8:默认方法,静态方法
*
* 接口中结构的特点:
* 接口中的抽象方法默认是public abstract,我们推荐就省略了
* 接口中的常量默认是public static final,我们推荐就省略了
*
*   *接口中的结构必须是public
*
* 接口可以被实现,实现类
* 比如说A类 implements 接口,那我们就说A是这个接口的实现类
*
* 如果一个类实现一个接口,它就需要重写接口中所有的抽象方法
*
* 实现接口是可以多实现的,继承只能单继承
* 开发中,如果一件事情可以通过继承和实现接口来解决问题,接口解决
*
* 面试题:
* 1.继承抽象类和实现接口的异同?
*   抽象类可以单继承接口可以多实现
* 2.抽象类和接口的区别?
*
* 接口存在的意义?
* 约定
*
* 多态的前提条件?
* 1.继承,实现
* 2.重写方法
* 3.父类--子类,接口--实现类
*
* 面试题:
* 在Java中只有单继承?
* 在Java中存在多继承的,发生在接口之间
* Java类与类之间只有单继承
*
* 面向对象编程
* 面向接口编程
* 面向切面编程
*
* 抽象类也是比类更高级的抽象
*
* 栈先到后得、后到先得,队列先到先得、后到后得

课下

Demo

// 接口定义:是一个极端的抽象类,接口中只有抽象方法和全局常量(静态的常量)。
//抽象类Person的eat方法是一个抽象方法,定义的是一种规则
//如果类中全都是规则,没有属性、普通方法。。。
//那么这个类直接用接口来描述

//接口格式:class改用interface     接口没有方法体

//接口中内容:1)抽象方法      方法前默认使用public abstract
//          2)全局静态常量    属性前默认使用public static final修饰
                            //Demo类
package com.soft.zs;


public class Demo {
    public static void main(String[] args) {
        System.out.println(Person.male);
    }
}
interface A{}

                            //Person类
package com.soft.zs;

//就是一个规则
public interface Person {
    //接口中的属性
    String male="男";
    String female="女";
     void eat();
     void sleep();
     void walk();
}
                            //Teacher类
package com.soft.zs;

public class Teacher implements Person{
    @Override
    public void eat() {

    }

    @Override
    public void sleep() {

    }

    @Override
    public void walk() {

    }
}

输出结果 

 Demo1

//接口的使用:implements一个类去实现一个接口
//如果一个类没有重写接口的所有抽象方法,该类必须是抽象
                                //Demo类
package com.soft.zs;

public class Demo1 {
}


                                //Animal类
package com.soft.zs;

public interface Animal {
    String show();
}


                                //Cat类
package com.soft.zs;

//implements实现

public class Cat implements Animal{//实现某一种功能、规则
    @Override
    public String show() {
        return null;
    }
}

 Demo2

//**1.使用接口的意义:
//    继承是有局限的,但是类可以实现多个接口,
//      java的继承是单继承,一个类只能继承另一个类
//        如果使用接口,一个类可实现多个接口
//  2.接口可以很灵活:
//      接口可以继承接口,接口可以多继承,一个接口可以继承多个接口
//  3.一个类可以继承一个父类,同时实现多个接口:
//      格式  class D extends A implements B,C
                                //Demo2
package com.soft.zs;

public class Demo2 {
}

                                //A类
package com.soft.zs;

public interface AInterface {
    void m1();
}

                                //B类
package com.soft.zs;

public interface BInterface {
    void m2();
}
                                //C类
package com.soft.zs;

public interface CInterface extends AInterface,BInterface{

}
                                //MyInterfaceClassImpl
package com.soft.zs;

public class MyInterfaceClassImpl implements CInterface {
    @Override
    public void m1() {

    }

    @Override
    public void m2() {

    }
}

 总结

        今天学习了抽象类和接口,下午还讲了队列。

        由于昨晚的预习准备,早上的课程还算能够理解,但是下午的队列由于昨晚的单链表还不是很熟悉所有没弄明白。

        今日学习状况上午良好,下午糟糕,有可能是中午没休息好,老师所讲的抽象类是前面多态进化而成,还好听得懂也能理解,今晚继续沉淀沉淀,争取把今日所学吃下,有余力继续预习明天的课程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值