首页 > 编程语言 >Java

Java

时间:2023-12-29 22:22:54浏览次数:34  
标签:Java 构造方法 子类 访问 抽象类 父类 方法

Java类的封装

1、类为什么要封装?

如果不进行封装,那么对属性的操作,就具有可读可写能力并且可写的值没有做任何规范性的约束,会造成数据的不安全

 

2、访问控制修饰符

Java中的访问控制修饰符有四种:public、 protected、 default、 private用来控制类、属性、方法的访问范围

1. public:公共访问修饰符,可以在任何地方被访问。将属性或方法声明为public,可以被其他类的对象直接访问。

2. protected:受保护的访问修饰符,只有在同一包内的类和该类的子类可以访问。将属性或方法声明为protected,除了类内部和同一包内的类,还可以被其子类访问。

3. default:默认访问修饰符,没有关键字修饰符的情况下即为默认访问修饰符。在同一包内的类可以访问,默认访问修饰符不能在不同包中的类使用。

4. private:私有访问修饰符,只有在类的内部可以访问。将属性或方法声明为private,可以保证其只能被类内部的其他方法访问,外部无法直接访问。

 

3、属性私有化

将属性私有化,然后对外提供属性的访问方法,分别是赋值方法和取值方法。 1.赋值方法,提供 set方法。 2.取值方法,提供 get方法。 如果私有化属性之后, 提供了set方法,说明属性可写, 提供了get方法,说明属性可读。   构造方法 1、什么是构造方法 构建对象时用的方法,即就是对象创建时要执行的方法。   2、构造方法格式 修饰符 构造方法名(参数列表){   // 代码块   }   3、构造方法特点 1.构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方 法就执行结束。 2.构造方法名称必须和类名保持一致。 3. 构造方法没有具体的返回值。 4.当一个类没有显式的写构造方法时,使用的时默认的无参构造方法。   4、this关键字的用法 1.构造方法之间的调用,可以通过this关键字来完成。构造方法调用格式:this(参数列表); 2.成员变量的赋值,可以通过this关键字来完成。   类的继承 1、继承的概念 继承是指子类从父类继承其非私有成员(属性和方法),并且子类可以添加自己的属性和方法。继承关系表示为“is-a”关系,即子类是父类的一种特例。   2、继承的使用 在java程序中,如果想声明一个类继承另一个类,需要使用extends关键字:class A extends B{ } 注意事项 1.在Java中,类只支持单继承,也就是说一个类只能有一个直接父类, 2.多个类可以继承一个父类 class B extends A{} class C extends A{} // 类B和类C都可以继承类A   3.在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类 class B extends A{} // 类B继承类A,类B是类A的子类 class C extends B{} // 类C继承类B,类C是类B的子类,同时也是类A的子类   4.在Java中,子类和父类是一种相对概念,也就是说一个类是某个类的父类的同时,也可以是另一个类的子类。 class B extends A{} // 类B继承类A,类B是类A的子类 class C extends B{} // 类C继承类B,类C是类B的子类,同时也是类A的子类   3、子父类中成员变量的特点 1.如果子类中出现了父类中同名的成员变量,这时子类中若要访问父类中的成员变量,必须使用关键字super来完成。super用来表示当前对象中包含的父类对象空间的引用 2.当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。(就近原则) 3.在创建子类对象时,因为子类继承父类的成员变量和成员方法,所以子类会先加载父类,调用父类的构造 方法。因此子类中所有构造方法的第一行有默认的隐式super()语句来调用父类的构造方法。如果当父类 中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问父类有参数的构造方法。   4. 向上转型 子类类型可以转换为父类类型,但要注意以下几点:
1.只能从具体子类转换为抽象父类。
2.只能转换为父类的公共和保护成员。
3.转换后的对象只能访问父类的公共和保护成员,不能访问私有成员。   5.  重写(override): 子类可以重写父类的方法,以实现多态性。重写规则如下:
1.方法名、参数列表和返回类型必须与父类方法相同。
2.访问权限不能比父类方法更严格。
3.抛出异常不能比父类方法抛出的异常更多。   6、继承的规则 1.子类可以访问父类的公共(public)和非公共(protected)成员。
2.子类可以重写(override)父类的方法,但只能继承父类的非私有方法。
2.子类不能继承父类的构造方法,但可以调用父类的构造方法。
3.子类可以拥有自己的构造方法,用于初始化属性和调用父类构造方法。   7.  继承的缺点: 1.继承会导致类之间的耦合度增加,不易维护。
2.继承层次过深时,查找和调试代码变得困难。
3.继承不能实现多个父类之间的组合。   抽象类 1、抽象类的概念 在一个类中,含有的方法只有方法名,没有方法体的类,我们称之为抽象类   2、抽象类的格式 1.抽象方法定义的格式: public abstract 返回值类型 方法名(参数); 2.抽象类定义的格式: public abstract class 类名 {   语句   }   3、普通类继承抽象类方法 1.子类继承了父类的方法,而父类的方法是抽象的,并没有具体的实现过程,那就需要子类(普通类)实现父类的抽象方法,即:撰写具体的实现。如果子类不实现该方法,那么子类就得是抽象类 2.如果子类不是抽象类,子类需要重写父类的抽象方法   4、抽象类特点总结 1.抽象类由关键字abstract来修饰; 2.抽象方法也有关键字abstract来修饰,且没有方法体,连大括号都没有; 3.抽象类可以含有抽象方法,也可以含有普通方法,也可以任何方法都不含; 4.抽象类不能直接创建对象(建自己的对象),因为抽象类中含有了抽象方法后,使用对象的引用去调用是没有任何意义的; 5.抽象类是可以通过多态的形式,建立子类对象的,这种方式叫做:向上造型; 6.抽象类也是类,类与类之间就可以形成继承关系,当一个普通类继承了抽象类后,就需要实现抽象类的全部抽象方法,即重写;否则,当前的普通类业的是一个抽象,只继承不线上是被允许的;   5 、接口与抽象类:
1.接口是一种完全抽象的概念,只包含抽象方法。
2.类可以实现多个接口,但只能继承一个抽象类。
3.实现接口的类必须提供接口中所有抽象方法的实现。   6、  抽象类的应用场景:
1.当一组类具有相同的基础功能,但具体实现不同的时候,可以使用抽象类来实现共性功能。
2.当需要实现多态性时,可以使用抽象类。   7、abstract 关键字的冲突 1.final:被 abstract 修饰的方法,强制要求子类重写,被 final 修饰的方法子类不能重写 2.private:被 abstract 修饰的方法,强制要求子类重写,被 private 修饰的方法子类不能重写 3.static:被 static 修饰的方法可以类名调用,类名调用抽象方法没有意义   类的高级特性 1、接口 1.接口是什么 接口:体现的思想是对规则的声明,Java中的接口更多体现的是对行为的抽象。   2.接口介绍 (1)接口用关键字interface来定义 public interface 接口名 { } (2)接口不能实例化,且接口没有构造方法 (3)接口和类之间是实现关系,通过implements关键字表示 public class 类名 implements 接口名 { } (4)接口的子类(实现类)要么重写接口中的所有抽象方法 要么是抽象类   3.接口中的成员特点 (1)成员变量只能是常量 默认修饰符:public static final (2)没有构造方法 (3)成员方法只能是抽象方法 默认修饰符:public abstract   2、static 关键字 1.static 介绍 static 是静态的意思,可以修饰成员变量,也可以修饰成员方法   2.static 修饰成员的特点 (1)被其修饰的成员, 被该类的所有对象所共享 (2) 多了一种调用方式, 可以通过类名调用 (3) 随着类的加载而加载, 优先于对象存在   3.static 成员变量 共享数据   4.static 成员方法 常用于工具类   5.static 注意事项 使用static关键字时应该仔细考虑,因为它会影响成员的行为,包括内存使用和访问方式。静态成员在所有类实例之间共享,一个实例所做的更改将影响所有实例。   3、final关键字 1.final 关键字介绍 意思是最终,不可变的,可以修饰(方法,类,变量)   2.final 修饰的特点 (1)修饰方法:表明该方法是最终方法,不能被重写 (2) 修饰类:表明该类是最终类,不能被继承 (3) 修饰变量:表明该变量是常量,不能再次被赋值   3.final 关键字的一些特性 (1)final修饰类不可以被继承,但是可以继承其他类 (2)final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final (3)final修饰的变量称为常量,这些变量只能赋值一次, (4)引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改 (5)修饰成员变量,需要在创建对象前赋值,否则报错 (6)在java程序开发中,我们想在类中定义一个静态常量,通常使用public static final修饰的变量来完成定义。此时变量名用全部大写,多个单词使用下划线连接 (7)接口中的每个成员变量都默认使用 public static final 修饰。所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。   4.final 关键字的用处 final关键字用于表示不可变性,可以应用在不同的场景,包括常量、方法、类以及方法参数。这种不可变性有助于代码的安全性和可维护性,同时提供了一些优化的机会。   代码块 代码块的分类及各作用 1、局部代码块 位置:方法中定义 作用:限定变量的生命周期,及早释放,提高内存利用率   2、 构造代码块 位置:类中方法外定义 特点:每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行 作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性   3、静态代码块 位置:类中方法外定义 特点:需要通过static关键字修饰,随着类的加载而加载,并且只执行一次 作用:在类加载的时候做一些数据初始化的操作   4、同步代码块 位置:方法内部定义 特点:通过 synchronized 关键字来实现,用于控制对对象的访问 作用:同步块是为了实现线程同步而使用的代码块,在多线程编程中非常重要   5、代码块的作用 代码块的使用有助于控制变量的作用域、初始化对象状态和管理多线程编程中的并发访问问题。根据不同的需求和场景,选择合适类型的代码块是编写高效和清晰代码的重要一环。   匿名对象 1、概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量   2、匿名对象的使用 (1)创建匿名对象直接使用,没有变量名,只能使用一次。 (2)匿名对象可以作为方法接收的参数、方法返回值使用   3、匿名对象的用途:
(1)临时操作: 匿名对象通常用于执行一些临时的、一次性的操作。如果某个对象只在一个地方使用一次,没有必要为其创建一个具名对象。
(2)简化代码: 在某些情况下,使用匿名对象可以使代码更加简洁,特别是在链式调用或者一系列方法调用的情况下。   6.匿名对象的注意事项:
(1)无法重复使用: 由于匿名对象没有引用,无法在后续的代码中再次使用。如果需要多次使用同一个对象,应该使用具名对象。
(1)不方便调试: 由于无法引用匿名对象,当出现问题时可能难以追踪和调试。   内部类 1、内部类的概念 内部类是指定义在另一个类内部的类。在Java中,内部类有多种类型,包括成员内部类、静态内部类、局部内部类和匿名内部类。   2、内部类成员访问 内部类中, 访问外部类成员 : 直接访问, 包括私有 外部类中, 访问内部类成员 : 需要创建对象访问   3、内部类分类 (1)成员内部类:
1.成员内部类是定义在另一个类内部的类,它具有与外部类相同的访问权限。
2.成员内部类可以访问外部类的成员变量和方法,包括私有成员。
3.创建成员内部类的实例需要先创建外部类的实例,然后通过外部类实例创建内部类实例。   (2)静态内部类:
1.静态内部类是使用 static 关键字修饰的内部类,与外部类实例无关。
2.静态内部类不能访问外部类的非静态成员,但可以访问外部类的静态成员。
3.创建静态内部类的实例不需要外部类的实例。   (3)局部内部类:
1.局部内部类是定义在方法内部的类,它只在声明它的方法中可见。
2.局部内部类可以访问外部类的成员,但只能访问 final 或 effectively final 的局部变量。   (4)匿名内部类:
1.匿名内部类是没有类名的内部类,通常用于创建只需使用一次的类的实例。
2.常用于实现接口或继承抽象类,并在创建对象时直接实现其方法。

标签:Java,构造方法,子类,访问,抽象类,父类,方法
From: https://www.cnblogs.com/linjun2023/p/17935170.html

相关文章

  • 下载文件报错:java.io.IOException: UT010029: Stream is closed
    在项目中使用EasyExcel导出excel然后压缩成压缩包下载,下载也是能正常下载就是会抛出这个错误虽然说这个错误不影响下载功能,搞不好就因为这个错误某天系统崩溃,那时候就不是这么好玩了,于是我在百度上疯狂查找有的说是流没有关,要在finally里面把流关了关了之后,满怀期待的重新运......
  • 无涯教程-Java 正则 - static Pattern compile(String regex)函数
    java.util.regex.Pattern.compile(Stringregex)方法将给定的正则表达式编译为一个模式。staticPatterncompile-声明publicstaticPatterncompile(Stringregex)regex - 要编译的表达式。staticPatterncompile-异常PatternSyntaxException  -如果表达......
  • 无涯教程-Java 正则 - static Pattern compile(String regex, int flags)函数
    java.util.regex.Pattern.compile(Stringregex,intflags)方法将给定的正则表达式编译为一个模式。staticPatterncompile-声明以下是java.util.regex.Pattern.compile(Stringregex,intflags)方法的声明。publicstaticPatterncompile(Stringregex,intflags)reg......
  • Java的基础知识
    一、Java类的封装访问修饰符:在Java中,可以使用访问修饰符来限制对类、类的成员变量和方法的访问权限。常用的访问修饰符包括:public:公共访问修饰符,表示可以被任何类访问。private:私有访问修饰符,表示只能在当前类内部访问。protected:受保护访问修饰符,表示只能在当前类及其子类......
  • JavaWebDay6
    数据库:存储和管理数据的仓库数据库管理系统:DataBaseManagementSystem(DBMS),操纵和管理数据库的大型软件SQL:StructerQueryLanguage,操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准关系型数据库 SQL简介  注意--注释内容 --与注释内容之间有......
  • JAVA语言基础内容2
    一.类的封装封装是面向对象编程中的一种重要概念,它指的是将类的内部数据和实现细节隐藏起来,只暴露必要的接口供外部使用。封装通过限制对类的直接访问,提高了代码的安全性和可维护性,并使得类的实现细节可以更灵活地变化而不影响外部代码。封装的关键点包括:访问控制:封装通过访......
  • 无涯教程-Java 正则 - MatchResult String group()函数
    java.time.MatchResult.group()方法返回与上一个匹配项匹配的输入子序列。Stringgroup()-声明Stringgroup()Stringgroup()-返回值与上一个匹配项匹配的(可能为空)子序列,为字符串形式。Stringgroup()-异常IllegalStateException-如果尚未尝试匹配,或者上一个匹......
  • 无涯教程-Java 正则 - MatchResult String group(int group)函数
    java.time.MatchResult.group(intgroup)方法返回在上一次匹配操作期间给定组捕获的输入子序列。Stringgroup(intgroup)-声明以下是java.time.MatchResult.group(intgroup)方法的声明。intgroup(intgroup)group  - 该匹配器模式中捕获组的索引。Stringgroup......
  • Java+SpringBoot+Maven+TestNG+httpclient+Allure+Jenkins实现接口自动化
    一、方案需求目标:测试左移,测试介入研发过程,验证单接口正常及异常逻辑选用工具:Java、SpringBoot、Maven、TestNG、httpclient、Allure、Jenkins方案:创建测试接口测试工程,参照研发设计文档和设计思路,编写正常及异常用例,直接调用服务端接口,覆盖接口逻辑和验证异常处理,提升接口健壮......
  • 无涯教程-Java 正则 - MatchResult int end(int group)函数
    java.time.MatchResult.end(intgroup)方法返回在此匹配期间给定组捕获的子序列的最后一个字符之后的偏移量。intend(intgroup)-声明intend(intgroup)group  - 该匹配器模式中捕获组的索引。intend(intgroup)-返回值最后一个字符匹配后的偏移量。intend(......