包装,遗传和多态性是面向对象的编程的三个主要特征。
包装的目的是确保变量的安全性。用户不需要关心细节的详细信息,而只需要通过外部接口访问类的成员。代码效果不好,因此成员变量通常在编写课程时将其私有化。外部类需要使用getter和setter方法查看和设置变量。
想象:学生小姐已成功创建。您可以在正常情况下更改他的名字和年龄吗?
换句话说,外部只能通过调用我的定义方法来获得成员资格属性,我们可以在此方法中执行一些其他操作。例如,小姐可以修改名称,但名称不能包含“ small”一词。
仅设置外部开放的名称的方法是我仍然需要进行一些额外的处理,因此我无法直接直接操作会员变量的权限!
包装的想法实际上是隐藏了实施的详细信息。外部只需要知道这种方法是什么,并且无需关心实施。
包装是通过访问权限控制来实现的。
继承是一个非常重要的内容。定义不同的类时,存在一些相同的属性。为了促进使用,您可以将这些常见属性抽象成父类。在定义其他子阶级时,可以使用中国和非洲私人成员的父母类别。
现在有两种类型的学生,艺术学生和体育学生。他们都是学生的分支机构,但他们都有自己的方法:
子类具有父类的所有属性。可以看到受保护的人,但不能在外部使用(包括属性,无形,不可用),并且子类也可以具有自己的方法。inheritance只能继承一个父级,并且不支持更多的继承!
每个子类必须定义一个构造函数来实现父类结构方法,即需要在构造函数中使用。如果父类使用默认的构造函数,则子类无需手动指向。
所有类默认从对象类继承。除非手动指定类型,否则无法更改顶级的父类。所有类都在对象类中包括:例如:
关于对象类的其他方法,我们将在Java多线程中再次提及它。
多态性是相同行为具有多个不同表达式或形式的能力。也就是说,由于实现类别是不同的,因此执行的结果是不同的!
重写方法的方法之前已经重新加载,该方法的重写和过载不同。借助原始方法不变的原始方法的逻辑,它支持了更多参数的实现。重写是直接遵循原始方法!
再次定义相同的方法后,涵盖了父类!子类也可以增加父方法的访问!
思考:可以重写静态方法吗?
当我们重写该方法时,我们不仅要使用自己的逻辑,还想执行父类的逻辑(即调用父类的方法)吗?
以同样的方式,如果要访问父类的成员变量,也可以使用超级关键字访问它。请注意,子类可以具有与父类相同的成员变量!该方法中的默认值在参数列表>当前类成员变量>“当前类成员变量”>“父类成员变量”
谈论类型转换的类型转换。我们曾经了解了基本数据类型的类型转换,支持一种类型的数据类型转换为另一种数据类型,我们的类还支持类型转换(仅存在的类的转换)),例如,可以将子类转换为直接地:
我们还可以转换已明确转换为相应类型的父杯:
这种类型的转换称为向下变换。
关键字的实例,如果我们只得到父类报价,但是我不知道它是哪个皮下实现?我们可以使用关键字实现实现的实例,它可以做出键入判断!
通过类型判断,我们可以澄清哪个类是类的特定实现!
思考:结果是什么?
让我们谈谈最终关键字。目前,我们只知道关键字可以使变量不变的值。那么,如果您在班上宣布决赛会发生什么?
一旦将班级宣布为最终状态,它将不再继承,并且不允许使用子类的存在!该方法被声明为最终?
如果将类的成员属性声明为BEL,则必须在构造函数中或定义时给出初始值!
在学习了包装的继承和多态性之后,我们建议将最终关键字添加到不再更改的成员属性中。JVM将优化添加最终关键字的属性!
抽象类别本身是一个抽象,抽象类需要抽象该类,即,抽象类只能保留这些功能,而不是保留特定形式。例如,可以定义该方法,但是我无法意识到Itinstead,它由子类实现!
通过使用关键字来指示类是抽象类。抽象类可以使用关键字将方法表示为抽象方法,也可以定义一般方法。实现(除非子类也是抽象类)!
因为抽象类不是特定的类定义,所以它不能直接通过新关键字创建!
因此,抽象类别通常用于继承!抽象类使继承关系更加清晰:
该界面比抽象类更抽象。他仅表示一个特定的函数!也就是说,它仅包含方法的定义,甚至不包含类!该界面包含某些列的特定定义。该类可以实现此接口,表明该类支持接口代表的功能(类似于插头-in,只能作为附件函数添加到主题中。同时,特定的实现需要为由主题实现))
使用关键字表示它是一个接口(请注意,此处的类关键字被接口替换为接口),该接口只能包含权限!(默认情况下可以实现JAVA8),我们可以通过声明的关键字为默认方法提供默认方法:
接口中定义的变量,默认
一个类可以实现许多接口,但不能理解为更多的继承!(实际上,实现接口是附加函数,并且与继承的概念存在一定的差异。最多,它是多重继承的替代方案。)一个课程可以添加许多功能!
类要声明通过关键字实现的接口!每个接口都由逗号分隔!
实现接口的类也可以按关键字进行判断,还可以在上下支持转换!
课堂上可以有一个课程!从这里出现各种怪异的代码!
我们的班级可以嵌套在课堂上:
内部班级和成员的成员与会员方法相同。它们属于对象。也就是说,必须有外部对象来创建内部类对象!
静态内部类实际上与类中的静态变量和静态方法相同。他们属于班级。我们可以直接访问:
是的,您没有猜测,它与本地变量相同?
无论如何我都没有使用过!内部类别 - >疲倦或疲倦 - >无论如何,我还是累了!
匿名内部类是我们的重点,并且实现lambda表达式的原则!匿名内部类实际上是接口或抽象类的实现,当时接口或摘要类实际是匿名内部类:
我们不必单独创建一个课程即可实现它,但是我们可以在新过程中编写相应的实现!但是,如果您以这种方式编写,则不能重复使用它,只能在这里使用它!
lambda表达被读为一种表达式。实际上,我们的接口匿名实现简化了它,例如:::
lambda表达式(匿名内部类)只能访问外部最终或隐藏的最终局部变量!
为了方便起见,JDK为我们提供了编写功能的专用功能。这里
假设我们现在要在小小的名单中添加一个状态(跑步,学习,睡觉),您可以实时获得小米的状态:
但是这将有一个问题。如果我们只是存储字符串,则似乎无法按照我们的规则将外部传递到其他字符串中。这显然不够严格!
有没有办法更好地实现这样的状态标记?我们希望开发人员可以通过定义使用,我们可以使用枚举类别!
使用枚举类也非常方便,我们只需要直接访问它
枚举类型非常方便使用。实际上,枚举类型的本质是一个普通的阶级,但它继承了自我类别。我们定义的每个状态实际上都是状态类型成员变量!
由于枚举类型是普通类,因此我们还可以在枚举类型中添加唯一的成员方法
枚举类还带有一些继承的实用方法
原始:https://juejin.cn/post/710185382787620388