面向对象相关基础知识

本文介绍了Java编程中的包管理,包括包的创建、导入和访问规则。接着讨论了权限修饰符的四种类型及其作用范围。final关键字的用法,包括修饰类、方法和变量的含义。常量的概念,强调其在系统配置和信息标志中的应用。枚举作为特殊类型的特性,以及其在信息分类中的作用。抽象类和抽象方法的概念,以及它们在设计模式中的应用,特别是模板方法模式。最后,介绍了接口的定义、实现方式及多继承特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、包


  • 包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护。

  • 建包的语法格式:package 公司域名倒写.技术名称。包名建议全部英文小写,且具备意义

  • 相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!

  • 导包格式:import 包名.类名;

  • 假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问。

2、权限修饰符


  1. 简介

  • 权限修饰符:是用来控制一个成员能够被访问的范围。可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。

  1. 权限修饰符的分类和具体作用范围:

  • 权限修饰符:有四种作用范围由小到大(private -> 缺省 -> protected - > public )

3、final


  1. 作用

  • final 关键字是最终的意思,可以修饰(类、方法、变量)

  • 修饰类:表明该类是最终类,不能被继承。

  • 修饰方法:表明该方法是最终方法,不能被重写。

  • 修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次)。

  1. final修饰变量的注意

  • final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。

  • final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。

4、常量


  1. 概述

  • 常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。

  • 常量名的命名规范:英文单词全部大写,多个单词下划线连接起来。

  • 常量的作用:通常用来记录系统的配置数据。

 public class Constant {
    public static final StringLOGIN_NAME  =“admin";
      public static final StringPASS_WORD  =“123456";
 } 
  1. 常量做信息配置的原理、优势

  • 在编译阶段会进行“宏替换”:把使用常量的地方全部替换成真实的字面量。

  • 维护系统容易,可读性更好。

  1. 常量做信息标志和分类

  • 代码可读性好,实现了软编码形式。

5、枚举


  1. 概述

  • 枚举是Java中的一种特殊类型

  • 枚举的作用:"是为了做信息的标志和信息的分类"。

  1. 定义枚举类的格式:

修饰符 enum 枚举名称{

第一行都是罗列枚举类实例的名称。

}

 enum Season{
     SPRING , SUMMER , AUTUMN , WINTER;
 }

反编译后的枚举代码

 Compiled from"Season.java"
     public final class Seasonextendsjava.lang.Enum<Season> {    
     public static final Season SPRING=new Season();
     public static final Season SUMMER=new Season();
     public static final Season AUTUMN=new Season();    
     public static final Season WINTER=new Season();    
     public static Season[] values();
     public static SeasonvalueOf(java.lang.String);
 }
  1. 枚举的特征:

  • 枚举类都是继承了枚举类型:java.lang.Enum

  • 枚举都是最终类,不可以被继承。

  • 构造器都是私有的,枚举对外不能创建对象。

  • 枚举类的第一行默认都是罗列枚举对象的名称的。

  • 枚举类相当于是多例模式。

6、抽象类


  1. 简介

  • 都是用abstract修饰的;抽象方法只有方法签名,不能写方法体。

  • 一个类中定义了抽象方法,这个类必须声明成抽象类。

  1. 作用

  • 作为父类,用来被继承的。

  1. 注意事项

  • 抽象方法只有方法签名,不能声明方法体。

  • 一个类如果继承了抽象类,那么这个类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

  1. 抽象类的使用场景

  • 抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承。

  • 当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类就可以声明成抽象类。

  1. 抽象类的特征

  • 类有的成员(成员变量、方法、构造器)抽象类都具备

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

  • 一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

  • 不能用abstract修饰变量、代码块、构造器。

  • 最重要的特征得到了抽象方法,失去了创建对象的能力(有得有失)

  1. final和abstract的关系(互斥关系)

  • abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承。

  • 抽象方法定义通用功能让子类重写,final定义的方法子类不能重写。

7、抽象类的应用知识:模板方法模式


  1. 使用场景说明

当系统中出现同一个功能多处在开发,而该功能中大部分代码是一样的,只有其中部分可能不同的时候。

  1. 实验步骤

  1. 定义一个抽象类。

  1. 定义2个方法,一个是模板方法:把相同代码放里面去,不同代码定义成抽象方法

  1. 子类继承抽象类,重写抽象方法。

  1. 模板方法我们是建议使用final修饰的

  • 模板方法是给子类直接使用的,不是让子类重写的,一旦子类重写了模板方法,则模板方法就失效了,因此,加上final后可以防止子类重写了模板方法,这样更安全、专业。

  1. 作用

  • 提高了代码的复用性

  • 模板方法已经定义了通用结构,模板方法不能确定的部分定义成抽象方法,交给子类实现,因此,使用者只需要关心自己需要实现的功能即可。

public class Test {
    public static void main(String[] args) {
        StudentChild child = new StudentChild();
        child.wirte();

        StudentMiddle middle = new StudentMiddle();
        middle.wirte();
    }
}
public abstract class Student {
    /**
     * 正式:声明了模板方法模式
     * 模板方法我们是建议使用final修饰的
     */
    public final void wirte() {
        System.out.println("\t\t\t\t《作文》");
        System.out.println("第一段");

        // 写正文
        System.out.println(wirteMain());

        System.out.println("最后一段");
    }

    public abstract String wirteMain();
}
public class StudentChild extends Student{

    @Override
    public String wirteMain() {
        return "小学生写的正文";
    }
}
public class StudentMiddle extends Student{

    @Override
    public String wirteMain() {
        return "中学生写的正文";
    }
}

8、接口


  1. 接口的格式

public interface 接口名 {

// 常量

// 抽象方法

}

  1. 接口的用法

  • 接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。

  • 接口可以被类单实现,也可以被类多实现。

修饰符 class 实现类 implements 接口1,接口2,.... {

}

  1. 接口实现的注意事项

  1. 接口不能创建对象

  1. 一个类实现多个接口,多个接口中有同样的静态方法不冲突。

  1. 一个类继承了父类,同时又实现了接口,父类中和接口有同名方法,默认用父类的。

  1. 一个类实现多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可。

  1. 一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。

  1. 一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类

  1. 关系

  • 类和类的关系:单继承

  • 类和接口的关系:多实现

  • 接口和接口的关系:多继承,一个接口可以同时继承多个接口

 public interface Interface1 extends Interface2,Interface3{
    voidway1();
    voidway2();
 }
 public interface Interface2 {
    voidway3();
    voidway4();
 }
 public interface Interface3 {
    voidway5();
 }
  1. 接口多继承的作用

  • 规范合并,整合多个接口为同一个接口,便于子类实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值