lyt0612

导航

2022-07-26 第二组 刘禹彤 学习笔记

打卡第16天

今天继续学习面向对象

 

###学习内容:

1.面向对象特征:抽象

  • Java中除了类,还有抽象类和接口
  • 抽象方法,没有大括号----没有方法体
  • 抽象方法存在的意义是什么?

根本意义:约定

  • 抽象方法到底约定了什么,规定了什么,定了那些规则?

1.约定了返回值,访问权限,参数列表,需要在重写的时候去定义方法体

2.约定大于配置,配置大于编码

  • 抽象方法必须在一个抽象类里

1.当我们定义了一个抽象类这个抽象类中可以有哪些结构

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

2.抽象类中可以没有抽象方法

3.抽象类是不能被实例化的----抽象类不能创建对象

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

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

  • abstract能修饰什么?

类,方法

  • 抽象方法能不能用private修饰:不能,开发中,抽象方法基本上都是public

抽象方法能不能用final修饰?不能,用final修饰的方法不允许重写,抽象方法必须让子类重写d

抽象类能不能用final修饰?不能,用final修饰的类不能被继承,抽象方类必须让子类继承

总结:1.抽象方法必须是public或者protected(因为如果是private,不能被子类继承,子类便无法实现该方法

默认情况是可以的(默认情况其实就是public

2.抽象类不能被直接实例化,需要依靠子类采用向上转型方式处理

3.抽象类必须有子类,使用extends继承,一个类只能继承一个抽象类

4.子类(如果不是抽象类),则必须重写抽象类中的所有抽象方法

如果子类没有实现父类的抽象方法,必须将子类也定义成abstract

2.接口

  • 比抽象类更高级的抽象, 抽象类也是比类更高级的抽象
  • 声明:使用interface关键字,public interface Ch02

JDK1.7之前)接口中只能定义抽象方法,不能有属性,不能有方法

(静态常量)

JDK8及以后)接口中只能定义抽象方法,不能有属性,可以有默认方法和静态方法

静态常量

(JDK7---JDK8):默认方法,静态方法

  • 接口中结构的特点:接口中的抽象方法默认是public abstract,推荐省略

接口中的常量默认是public static final,推荐省略

  • 接口中的结构必须是public
  • 接口可以被实现,实现类

比如说A类implements 接口,那我们就说A是这个接口的实现类

如果一个类实现了一个接口,他就需要重写接口中的所有抽象方法

实现接口是可以多实现的,继承只能单继承

开发中,如果一件事情可以通过继承和实现接口来解决问题,接口解决

面试题: 1.继承抽象类和实现接口的异同 同:都需要重写所有的抽象方法 异:实现接口是可以多实现的,继承只能单继承

2.在java中是否只有单继承? 不是 在java中是存在多继承的,发生在接口之间 java类与类之间只有单继承

  • 接口存在的意义:约定

面向接口编程

面向切面编程

面向对象编程

 

3.栈和队列

栈和队列是两种操作受限的线性表

这种受限表现在:

栈的插入和删除只允许在表的尾端进行(在栈中叫做”栈顶“,满足FILO

First In Last Out

队列只允许在表尾插入元素,在表头删除元素:FIFO First In First Out

  • 栈和队列的相同点:

1.都是线性结构

2.插入操作都是在表尾进行

3.都可以通过顺序结构和链式结构实现

  • 栈和队列的不同点:

1.队列:先进先出 栈:先进后出

###学习心得:

今天学习了面向对象最后一个特征:抽象,还学习了接口,栈,队列,上课基本可以跟上,不过做案例有点吃力

###掌握程度:一般

###练习:

public abstract class Animal {
    private String name;
    private  Integer age;

    public Animal() {
    }

    public Animal(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
     //抽象方法,没有大括号----没有方法体
    //抽象方法存在的意义是什么?
    //根本意义:约定
    //抽象方法到底约定了什么,规定了什么,定了那些规则?
        //约定了返回值,访问权限,参数列表,需要在重写的时候去定义方法体
    //约定大于配置,配置大于编码
    public abstract void eat();
    public abstract void show();
}
package a;

public abstract class Animal_Son extends Animal{

}
package a;

public class Person extends Animal{
    public void eat(){
        System.out.println("人在吃饭。。");
    }
    public void drank(){
        System.out.println("人在喝水");
    }

    @Override
    public void show() {
        System.out.println("haha");
    }
}
public class Ch01 {
    public static void main(String[] args) {
//        Animal animal = new Animal();不行
        Animal animal = new Person();
    }

}

 

###运行结果:

 

 

posted on 2022-07-26 18:58  小仙女吖~  阅读(33)  评论(0编辑  收藏  举报