java面向对象进阶基础语法——学习笔记(9)

java面向对象进阶基础语法——学习笔记(9),第1张

了解语法基本作用

1、包package

学习目标:相同包下的类可以访问,不同包用import导包使用。

导包快捷键:1、点击+alt+enter;2、自动导包(file->settings->搜索auto->勾选),如下图:

注意:如果导入多个不同包下名称相同的类,则默认只能导入一个,其他的要带包命访问。

2、权限修饰符modifier

成员能够被访问的范围,范围从大到小(private->缺省[包访问权限]->protected->public)

注意:protected的其他包中的子类可以访问,而且是通过子类对象访问

成员变量一般是私有的,方法是公共的,

3、final,最终

(1)final修饰的类不能被继承。使用情况,比如工具类,工具类是为了通过类名直接调用其中的方法,不需要去继承。

(2)final修饰的方法不能被重写。重写时直接写函数名+回车即可快速写出。

(3)final修饰的变量有且只能被赋值一次。

变量分为局部变量和成员变量,成员变量包括实例成员变量和静态成员变量。

用final修饰实例成员变量是很没有必要的。用final修饰静态成员变量,被称为常量。

4、常量

(1)常量概述和基本作用

组成:public static final 类型 名称 = 值;命名规范:英文单词全部大写用下划线连接。

好处:可以用于做系统的配置信息,方便程序的维护,方便重构,同时提高可读性。编译优化,宏替换,将常量替换为字面值,这样就不需要再去找变量了,提高性能。

(2)常量做信息标志和分类

好处:可读性好

5、枚举

(1)枚举的概述:做信息标志和分类

在命令行窗口进行反编译,结果如下: 

 (2)枚举的使用场景演示

 在企业中常量用的依旧多,可能是因为简单,像账号、密码这样就应该用常量。

6、抽象类abstract

(1)抽象类(不完整的设计图)

抽象类、抽象方法用abstract修饰。抽象方法不能写方法体{},有抽象方法的类也必须用abstract修饰。抽象类就是做父类,让子类去继承,去实现具体的抽象方法。

//抽象类
abstract class Animal{
//抽象方法
    abstract void run();
}

使用场景:子类都用这个方法,但又不同(比如动物可以跑,但有的快,有的慢)。

优点:提高代码复用性。

注意:子类必须具体实现父类中所有的抽象方法,或者子类也定义成一个抽象类。

(2)应用案例

父类 


package com.laogao.practice.card;

public abstract class Card {
    private String name;
    private double money;
    public abstract void pay(double money);



    public String getName() {
        return name;
    }

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

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }
}

子类:金卡

package com.laogao.practice.card;

public class GoldCard extends Card{

    @Override
    public void pay(double money) {
        System.out.println(getName()+"卡中余额:"+getMoney());
        System.out.println("实际花费:"+money*0.8);
        setMoney(getMoney()-money*0.8);
        System.out.println(getName()+"卡中余额:"+getMoney());
    }
}

 测试类

package com.laogao.practice.card;

public class TestDemo {
    public static void main(String[] args) {
        GoldCard goldCard=new GoldCard();
        goldCard.setMoney(1000);
        goldCard.setName("老王");
        goldCard.pay(500);
    }
}

运行结果:

 万能快捷键alt+enter,可以重写方法

 可以回顾一下方法的重写,重写和抽象类的子类,这里都对父类中的方法进行了 *** 作,重写是覆盖了父类方法,抽象类子类是去具体实现了父类的抽象方法。

所以子类对抽象父类的具体实现,是通过重写方法实现的。

(3)抽象类特征、注意事项(笔试、面试、提高理解)

对于最重要的特征,可以采用反证法进行回答:假如抽象类可以创建对象,当用对象调用抽象类的抽象方法时,抽象方法不完整,没有方法体,报错。所以不可以创建抽象类对象。

Java语法严谨,一刀切,抽象类就像是不完整的设计图,不能用,不能实例化 。

final和abstract是什么关系?

(4)应用知识:模板方法模式

 案例:学生写作文

建议使用final修饰模板方法,这样子类就不能重写了 ,不加也没事。

package com.laogao.practice.write;
//父类:学生
public abstract class Student {
    public final void model(){
        System.out.println("作文开头统一格式");
        write();
        System.out.println("作文结尾统一格式");
    }
    abstract void write();
}

package com.laogao.practice.write;
//子类:中学生
public class MiddleStudent extends Student {
    @Override
    void write() {
        System.out.println("中学生专属作文主体");
    }
}

package com.laogao.practice.write;
//子类:小学生
public class ChildStudent extends Student{
    @Override
    void write() {
        System.out.println("小学生专属作文主体");
    }
}

package com.laogao.practice.write;
//测试类
public class TestDemo {
    public static void main(String[] args) {
        MiddleStudent middleStudent=new MiddleStudent();
        middleStudent.model();
        ChildStudent childStudent=new ChildStudent();
        childStudent.model();
    }
}

 

7、接口interface

(1)概述、特点

接口是一种规范(规范一定是公开的,常量的public static和抽象方法的public abstract可以省略)。jdk8只能放常量和抽象方法:

package com.laogao.interfacep;

public interface Demo {
    //接口相当于干爹,
    // 里边都是抽象类或者常量,jdk8之前,
    // 所以需要实现类去实现这些抽象的方法
    public static String title="Java";//常量
    String content="接口";//public static可以省略;
    public abstract void study();//抽象方法
    void review();//public abstract 可以省略
}

(2)基本使用:被实现implements

实现接口的类被称为实现类,一个类可以实现多个接口(接口可以被类单实现,也可以被类多实现)。创建实现类后,快捷键alt+enter快速实现抽象方法。

注意:一个类实现接口,必须重写全部接口的全部抽象方法,否则这个类需要定义成抽象类。

package com.laogao.interfacep;

public class DemoImplements implements Demo,Practice{
    @Override
    public void study() {
        System.out.println("学习啦");
    }
    @Override
    public void review() {
        System.out.println("复习啦");
    }
    @Override
    public void practice() {
        System.out.println("练习啦");
    }
}

(3)接口与接口的关系:多继承

接口多继承的作用:规范合并,整合多个接口为同一个接口,便于子类实现。

(4)JDK8开始新增接口方法,三种(用到的很少)

 接口可以当成一种特殊类,接口更加的抽象

切换编译jdk版本(如果版本低于1.9,则在接口中使用私有方法会报错):

(5)使用接口的注意事项(面试),了解即可

分析:1、接口中有抽象方法,接口像特别的抽象类,方法体是不完整的,所以不能创建对象。

2、 静态方法是通过接口名调用的,所以即便两个静态方法一样也不冲突。

3、父类就像亲爹,接口就像干爹。先父类再接口。

4、默认方法是通过实现类对象进行调用的,遇到多接口中有相同的默认方法,实现类会重写。(这些语法很偏,一般用不上)

5、若不同接口中有相同方法名,这种情况,报错,因为不知道调用谁)

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/923342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存