(内部类,权限修饰符,多态,抽象类)2020.10.22

it2026-08-14  8

目录

内部类成员内部类默认内部类:私有内部类:静态内部类: 局部内部类: 包访问权限修饰符多态向上转型向下转型instanceof 抽象类abstract

内部类

定义:将一个类定义到另一个类的里边,里边的类就称为叫做内部类,内置类。    将内部类定义在它所属的类中,类中分为成员位置和局部位置,因此    按照位置划分: 成员内部类和局部内部类。    按照内部类是否有类名划分:有名内部类和匿名内部类

成员内部类

结构:    class 外部类名 {       class 内部类名 {       }    }    将类定义在成员位置上,因此该类可以使用成员修饰符进行修饰。    成员内部类可以使用成员修饰符来修饰:普通、私有、静态    普通、私有、局部内部类,类中的成员:非静态成员。因此要访问成员,必须先创建内部类对象。    普通:直接方式:new Outer().new Inner(); 和间接方式 : 在所属的外部类中创建方法,在方法中,创建内部类对象。    私有:只能间接方式创建对象,与普通相同。    局部:在所属的方法中创建对象    静态:成员可以是静态的也可以是非静态的。      非静态:需创建对象,方式两种 直接或间接 new Outer.Inner();      静态: 直接类名访问,需先找到所属的外部类 Outer.Inner.静态名 总结:是否创建对象,取决于类中的成员是否是静态

默认内部类:

类中可以定义的成员有:           非静态成员、静态常量 类中可以直接访问它所属的外部类中的成员:           私有、静态的、非私有非静态

私有内部类:

使用方式与默认内部类时相同的,只不过在内部类前使用private关键字修饰了,因此 该内部类只能在它所属的外部类中使用,即提供一个方法,在方法中创建内部类对象。

静态内部类:

就是内部类前使用关键字static修饰了。 在该内部类中:既可以定义静态成员也可以定义非静态成员。

局部内部类:

结构:    class 外部类名 {      public void 方法名(){        class 内部类名 {        }      }     } 将内部类定义在局部位置上,即方法中。 总结: 创不创建对象,取决于类中的成员是否是静态。

概念:  1.用来分类管理类文件(包可以形象化为电脑中的文件夹)  2.class文件与Java源文件相分离  3.在不同包中出现同名的类 格式:   package 包名;   注意:这条语句在一个Java中文件只能出现1次      这条语句必须写在有效代码行的最上边   包名:通常都是小写单词或小写字母。   规范: 公司域名倒置.项目名.模块名.[子模块]*;      eg: com.ujiuye.cms.login;   注意: 一旦定义了package语句,那么类名的完整形式为:包名.类名   带包编译: javac -d 目录 源文件名.java   带包执行: java 包名.类名  当定义了package,类名的完整形式有点长,倒置创建对象时编写也有点长,因此想要简化代码,可以使用import关键字来简化,是一个导包的语句。  格式:    import 包名.类名; 推荐 或 import 包名.*;    位置: 在package 和 class 的中间,可以出现多次。    创建对象时,可以省略”包名.”。     注意:在不同包中使用时,同一包中不需要import    总结:      package : 告诉编译器,当前类要存储在哪      import :告诉编译器,当前类中使用的其他类去哪找

访问权限修饰符

指的是类中的成员能被访问的权限。 由小到大: private 默认 protected public

当前类同包下不同包子类(继承)所有private√默认√√protected√√√public√√√√

以后定义成员时,选择合适的修饰符来修饰,控制访问的权限。

多态

面向对象的特征:封装、继承、多态 理解:一个对象具有多种形态。  站在对象的角度来看,可以使用不同类型的引用变量来指向。  站在引用变量的角度来看,该引用变量可以指向不同类型的对象。 前提:   必须有继承或实现。 表现:   父类型引用指向(接收)它自己的子类对象。 多态形式访问类中的成员方法时(虚拟调用):   编译时期:要检查引用变量所属的类型中,是否有要调用的方法,有编译通过,否则失败。   运行时期:运行的是对象类型中的该方法。   总结:编译看父类,运行看子类。 好处:   提高了代码的扩展性 ,代表案例方法参数 弊端:   调用的方法只能是子父类中共有的方法。 应用:   多态参数、多态数组… 转型问题:

向上转型

(基本类型的自动转换) 父类型引用变量指向子类对象。

向下转型

(基本类型的强制转换) 将父类型引用变量转为子类型引用变量,   格式:(子类类型)父类型引用变量  以上两行代码编译是没有问题的,但是运行会出现异常。  类型转换异常,不能将Animal1 转为 Cat1类型。 总结:做转型时,一直是子类对象的引用变量的类型在改变,一会是父类型引用,一会是自己类型的引用,由始至终对象一直是子类对象。

instanceof

运算符,比较运算符,运算后的结果是boolean类型。  比较左边的引用变量所指向的对象是否是右边的类型,即判断两边类型是否一致。  注意:如果判断的类型有父子关系,一定是先判断子类型最后是父类型,     如果是兄弟关系没有顺序了。

抽象类

也是类,只不过是一个特殊的类,这个类有点强制性的感觉。 由来: 当描述Cat类和Dog类时,发现有共性的方法声明,即eat()方法,将共性内容进行向上抽取,抽取到父类Animal中,但是只能抽取方法的声明,因此这个方法是没有方法体的方法,需使用关键字abstract,这样的方法称为叫做抽象方法,抽象方法要在抽象类中。

abstract

抽象的意思,是一个修饰符。可以修饰类和方法。 格式:   abstract class 类名{} 特点:  1.抽象方法要在抽象类中  2.抽象类是不可以实例化的,即不能创建对象  3.抽象类应该是一个父类,子类继承抽象类,子类想要能创建对象,需将继承的所有抽象方法都重写,否则子类是抽象类。  因此一个类的修饰符,不可能final和abstract都有  4.抽象类中可以没有抽象方法,目的就是不让其实例化 成员:   抽象方法、成员变量、构造方法、成员方法   注意:抽象类中的成员可以是以上的四种内容,不是要求都同时存在的。

最新回复(0)