韩顺平0基础学java——第20天

2024-06-11 22:52
文章标签 java 基础 20 顺平

本文主要是介绍韩顺平0基础学java——第20天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

p407-429

接口

一个类可以实现多个接口(电脑上可以有很多插口)

class computer IB,IC{}

接口中的属性只能是final,并且是public static final

接口不能继承其他类,但是可以继承多个别的接口

interface ID extends IB,IC{}

接口的修饰符只能是默认或者public

接口和继承

接口感觉就是实现多继承啊,利用接口来学习。接口就是对单继承机制的补充。

class LittleMonkey extends Monkey implements Fishable,Birdable { }

父子关系和师徒关系,接口更灵活。

解耦:即接口规范性+动态绑定

接口的多态特性

用接口作为形参,传进来的是对象实例。相当于向上转型。

当需要调用特有的功能时:

可以通过向下转型来调用。

接口的多态传递

接口类型的变量可以指向实现了该接口的类对象的实例

接口是可以继承的。这里IG继承了IH接口,而Teacher类实现了IG接口,相当于Teacher类也实现了IH接口。

课堂练习

跑了一下失败了,相当于接口里的【public static final int x =0】和父类的x冲突了。(它们是同级的?)

当我要访问接口中的x可以用A.x,当我访问父类的x就用super.x

内部类(重点)

一个类的内部,又完整嵌套了另一个类的结构,被嵌套的类成为内部类(inner class)

嵌套其他的类被称为外部类(outer class)。

跟他们没关系的类就是外部其他类

注意:类的五大成员

1.属性

2.方法

3.构造器

4.代码块

5.内部类

内部类的最大特点:可以直接访问私有属性,并且可以体现类之间的包含关系。

内部类可以无限套娃。

内部类有四种:

1.局部内部类

1.可以直接访问外部类的所有成员,包含私有的

2.不能添加访问修饰符,因为它的地位就是一个局部变量,局部变量是不能使用访问修饰符的。但是可以使用final,因为局部变量也可以final

3.作用域:仅仅在定义它的方法或者代码块中

4.局部内部类--访问-->外部类的成员【访问方式:直接访问】

5.外部类--访问-->局部内部类的成员【访问方式:创建对象,再访问。注意要在作用域内,也就是说,外部类在方法中创建内部类,再调用】

记住:局部内部类是定义在方法或者代码块中,它的作用域在方法体或者代码块,本质仍然是个类

6.外部其他类不能访问局部内部类

7.如果外部类和局部内部类的成员重名时,遵守就近原则。如果要调用外部类的变量,使用类名.this.成员名。

        比如:

        public class Outer{

                private int n1 = 1;

                class Inner{

                private int n1 =2;

                public void f1(){

                       sout(“n1=”+n1+“外部类的n1=”+Outer.this.n1);

                }                

        }

}

注意,这里的Outer.this本质是外部类的对象,即哪个对象调用了f1方法,那么this就指向了哪个对象

2.匿名内部类(anonymous,重要!!!)

匿名内部类就是定义在外部类的局部位置,比如方法中,并且没有类名。本质:1.是类,2.定义在外部类的局部 3.该类没有名字(其实有名字,但是是系统给分配的,我看不到)。4.匿名内部类同时还是个对象。

语法:

new 类或接口(参数列表){

        类体

}

记得加分号!!

基于接口的匿名内部类

这里的tiger的编译类型是IA接口,运行类型就是匿名内部类!

底层:class XXXX implements IA{

实现接口方法}

这儿XXXX的名称是

类名中的$就是系统分配的类名。

匿名内部类使用一次,就不能再使用。但是这个对象里的方法可以一直调用哈!(类没了,对象还在...时间过去了,照片还在?)

基于类的匿名内部类

new Father(){};加上这个大括号就不一样了!

这个f的编译类型是Father,但是运行类型是Feiju$1

注:如果是基于抽象类的匿名内部类,需要实现那些抽象方法

细节

1.动态绑定机制

2.即是个类也是个对象,可以直接调用

这里甚至能直接调用

3.不能添加访问修饰符

4.作用域在方法或者代码块之中

5.外部其他类不能访问匿名内部类

6.如果外部类的成员和匿名内部类的成员重名时,匿名内部类访问的话遵从就近原则,如果想访问外部类的成员,则可以使用(外部类名。this。成员)去访问。

匿名内部类使用

把匿名内部类当做实参传递

记得打分号。再f1的参数列表里直接new

3.成员内部类

成员内部类是定义在外部类的成员位置,并且没有static修饰的。(否则就是静态内部类)

1.可以直接访问外部类的所有成员

2.可以添加任意的访问修饰符(public、默认、protected、private),毕竟它是个成员

3作用域:和外部类的其他成员一样,为整个类体。

4成员内部类访问外部类是直接访问的

5外部类访问内部类是创建对象再访问

6外部其他类访问

        6.1外部类的对象去new一个内部类实例:相当于把new Inner08()当做是Outer08的成员

        

        6.2在外部类中,编写一个方法来返回内部类

        

7.如果外部类和内部类的成员重名了,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问

4.静态内部类

静态内部类是定义在外部类的成员位置,并且有static修饰

1.可以直接访问外部类的所有静态成员,包括私有的。但是不能直接访问非静态成员!

2.可以添加任意访问修饰符,因为它的地位就是一个成员。

3.作用域:和其他成员一样,为整个类体

4.可以通过外部类名直接访问,需要满足访问权限

例:

注意:重名了不用加this了,因为静态内部类也只能访问外部的静态属性,这种属性直接类名调用


到这里面向对象就讲完了


枚举类

1.枚举是一组常量的集合

2.枚举属于一种特殊的类,里面只包含一组有限的特定对象

static+final不会导致类加载!

使用enum关键字实现枚举类

1.使用关键字enum替代class

2.public static final Enu1 SPRING = new Enu1(“春天”,“温暖”);改成

        SPRING(“春天”,“温暖”);

即 常量名(实参列表)

3.如果有多个常量对象,使用逗号间隔:

SPRING(“春天”,“温暖”),SUMMER(“夏天”,“热”);

4.如果使用enum来实现枚举,要求定义常量对象,写在最前面。

enum关键字注意事项

javap指令:反编译。

1当我们使用enum关键字来开发一个枚举类时,默认会final继承Enum类。使用javap工具来证明

Enum类的toString方法是return name

2.传统的public static final Season2 SPRING = new Season2(“春天”,“温暖”)简化成

SPRING(“春天”,“温暖”),这里必须知道,它调用的是哪个构造器

3如果使用无参构造器创建创建枚举对象,则实参列表和小括号都可以省略。

4.当有多个枚举对象时,使用逗号间隔。

5.枚举必须放在行首

这篇关于韩顺平0基础学java——第20天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052484

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]