java匿名内部类主要原则

合集下载

JAVA基础考试(卷二)

JAVA基础考试(卷二)
System.out.println(“value=”+ switchIt (4));//第 3 行 } Public static int switchIt(int i){
int j=1; Switch(x){ Case 1:j++; Case 2:j++; Case 3:j++; Case 4:j++; Case 5:j++; Defualt:j++; } return j+x } } 第 3 行执行的结果是( ) A value=3 B value=4 C value=5 D value=6 E value=7
19.下面的哪几种陈述是成立的?() A.一个内部类可声明为静态的(static) B.一个匿名内部类可声明为公共的(public) C.一个匿名内部类可声明为私有的(private) D.一个匿名内部类可继承一个抽象类 E.一个匿名内部类可声明为保护型(protected)
20.分析以下程序: public class ConstOver{
在一个相同的包中想让一个类能够引用另一个类的成员达到这个目的的最小的访问控制权限的修饰符是什么
Java 强化考试
一 选择题(不定项选择题,每题 1.5 分,共 52.5 分)
1.用 java 虚拟机执行类名为 Hello 的应用程序的正确命令是( ) A java Hello.class B Hello.class C java Hello.java D java Hello
24.分析下列程序: class A{
public int getNumber(int a){ return a+1;
} } class B extends A{

java类与对象选择题附加答案解析

java类与对象选择题附加答案解析

Java 类与对象选择题练习附加答案解析1. 以下关于Java类的描述,正确的是:A. 类是对象的实例。

B. 类可以包含属性和方法。

C. 类不能继承其他类。

D. 类只能包含一个方法。

答案: B。

解析:类是对象的蓝图或模板,可以包含属性(成员变量)和方法(成员函数)。

2. 在Java中,要创建一个类的对象,应使用哪个关键字?A. newB. createC. instantiateD. make答案: A。

解析:在Java中,使用`new`关键字来创建类的对象。

3. 在以下关于构造方法的描述中,正确的是:A. 构造方法必须有返回类型。

B. 构造方法的名称必须与类名相同。

C. 构造方法可以是静态的。

D. 构造方法可以重载但不能覆盖。

答案: B。

解析:构造方法的名称必须与类名相同,并且没有返回类型(包括void)。

构造方法可以重载(多个同名但参数不同的方法),但不能覆盖(重写父类方法)。

4. 如果`MyClass`类有一个名为`display`的方法,且`myObject`是`MyClass`类的一个实例,如何调用该方法?A. display();B. MyClass.display();C. myObject.display();D. MyClass::display();答案: C。

解析:通过对象实例`myObject`来调用类的非静态方法`display`。

5. 以下哪个选项是关于`this`关键字的正确描述?A. `this`关键字指向类的超类(父类)。

B. `this`关键字只能在静态方法中使用。

C. `this`关键字引用当前对象的实例。

D. `this`关键字用于创建新的对象。

答案: C。

解析:`this`关键字引用当前对象的实例,可以在类的方法和构造方法中使用来引用当前对象的成员变量或方法。

6. 在Java中,如果类B继承自类A,且类A是基类,则下列哪个选项是正确的?A. 类B是类A的超类。

第7、8章 深入面向对象练习题

第7、8章  深入面向对象练习题

一、选择题(1)下列构造方法的调用方式中,正确的是()A.按照一般方法调用B.由用户直接调用C.只能通过new自动调用D.被系统调用(2)下列叙述中,正确的是( )A. 声明变量时必须指定一个类型B. Java认为变量number与Number相同C. Java中唯一的注释方式是"//"D. 源文件中public类可以有0或多个(3)下列叙述中,错误的是( )A. 父类不能替代子类B. 子类能够替代父类C. 子类继承父类D. 父类包含子类(4)下列关于继承的哪项叙述是正确的?A.在java中允许多重继承B.在java中一个类只能实现一个接口C.在java中一个类不能同时继承一个类和实现一个接口D.java的单一继承使代码更可靠(5)下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?( )A.private B.无修饰符C.public D.protected(6)给出下列代码,如何使成员变量m 被方法fun()直接访问?class Test{ private intm;public static void fun(){ ... }}A.将private int m 改为protected int mB.将private int m 改为public int mC.将private int m 改为static int mD.将private int m 改为int m(7)下列关于内部类的说法不正确的是( )A.内部类的类名只能在定义它的类或程序段中或在表达式内部匿名使用B.内部类可以使用它所在类的静态成员变量和实例成员变量C.内部类不可以用abstract修饰符定义为抽象类D.内部类可作为其他类的成员,而且可访问它所在类的成员(8)在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同,传回的值也可以不相同。

这种面向对象程序特性称为()。

慕课笔记-Java入门第二季

慕课笔记-Java入门第二季

慕课笔记-Java⼊门第⼆季1.java对象的使⽤(1)创建对象类名对象名=new 类名();(2)使⽤对象引⽤对象的属性:对象名.属性;引⽤对象的⽅法:对象名.⽅法();Note:①Java会给成员变量赋初始值,不会给局部变量赋初始值。

②在成员变量和局部变量重名时,局部变量有更⾼的优先级。

2.构造⽅法构造⽅法与类名相同且没有返回值。

不需要⽤对象名.⽅法();的形式来调⽤,直接创建对象后即可调⽤。

当没有指定构造⽅法时,系统会⾃动添加⽆参的构造⽅法。

3.static使⽤static变量,属于整个类所有⽽不是某个对象所有,即被类的所有对象所共享。

静态变量可以使⽤类名直接访问,也可以使⽤对象名进⾏访问。

①静态⽅法中可以直接调⽤同类中的静态变量,但不能直接调⽤⾮静态变量。

如果希望在静态⽅法中调⽤⾮静态变量,可以通过创建类的对象,然后通过对象来访问⾮静态变量。

②普通成员⽅法中,可以直接访问同类的⾮静态变量和静态变量。

③静态⽅法中不能直接调⽤⾮静态⽅法,需要通过对象来访问⾮静态⽅法。

④创建静态内部类的对象时,不需要外部类的对象,可以直接创建内部类对象名=new 内部类();。

⑤⽅法内部类定义在外部类的⽅法中,只在该⽅法内部所见,因此不能使⽤访问控制符和static修饰符。

4.继承的初始化顺序①初始化⽗类再初始化⼦类;②先执⾏初始化对象中属性,再执⾏构造⽅法中的初始化(和代码顺序⽆关)。

5.final使⽤final修饰类,则该类不能被继承。

final修饰属性,则该属性不会进⾏隐式的初始化,必须初始化属性或者在构造⽅法中赋值(只能选其⼀)。

6.super使⽤①⼦类的构造的过程中必须调⽤其⽗类的构造⽅法。

②如果⼦类的构造⽅法中没有显式调⽤⽗类的构造⽅法,则系统默认调⽤⽗类⽆参的构造⽅法。

③如果显式地调⽤构造⽅法,必须在⼦类的构造⽅法的第⼀⾏。

④如果⼦类既没有显式地调⽤⽗类的构造⽅法,⽗类⼜没有⽆参的构造⽅法,则编译报错。

详解java中instanceof各种的用法

详解java中instanceof各种的用法

详解java中instanceof各种的⽤法instanceof :1)、类与类: 判断继承链上的实例,⼀般使⽤在强转之前的判断(多态应⽤时,即多态作为形参时)2)、接⼝与类:接⼝可插拔,类都可以instanceof编译编译看类型,运⾏找对象,不能通过编译注意:final 类不可能发⽣多态已经确定的类体,指匿名⼦类对象3)、接⼝与接⼝ :存在继承关系不存在编译问题:主要看可能存在多态代码体现:1)String类重写Object类的equals⽅法(⽅法签名必须⼀致)public boolean equals(Object anObject){ //形参是多态时,才可以使⽤instanceof判断,因为多态存在于继承体系中 if(this==anObject) //对象地址值相同直接返回真. return ture; if(anObject instanceof String){ //判断传⼊的实参是否为String类型,因为形参类型是固定的(重写的要求),所以需要判断 String anotherString = (String)anObject; //强制转换 int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } return false;}2)除final修饰的类及匿名⼦类对象外,⼏乎所有的类都可以通过instanceof + 接⼝编译(因为可能存在多态)能否编译通过,遵循⼀个原则:是否可能与接⼝发⽣多态1public class Test{2 public static void main(String[] args){3 B1 b1 = new B1();4 B1 b2 = new B2(); //多态5 C1 c = new C1();6 D1 d = new D1();7 D2 d2 = new D2();8 A a1 = new B2();9 System.out.println(b1 instanceof A); //可以通过编译,因为A是可插拔的,B1的引⽤可以指向其⼦类对象,⽽其⼦类对象可能会实现了接⼝A(如B2),,但是运10 //⾏时就会检验了,结果为false (B1可能与A发⽣多态)11 System.out.println(b2 instanceof A);//结果为true (B2已经与A发⽣多态)12// System.out.println(b1 instanceof C1); //编译失败,因为B与C之间不存在继承关系 (C1不可能与C1存在多态,没有继承关系)13// System.out.println(d1 instanceof A); //编译失败,因为D不可能有⼦类,不可能发⽣多态 (D1不可能与A多态,不可以有⼦类)14 System.out.println(d2 instanceof A); //编译通过,结果为true (D2实现了A,与A产⽣了多态)15 System.out.println(new B1() instanceof A); //B1的匿名对象,false (B1可能与A发⽣多态)16 System.out.println(new B2() instanceof A); //B1的匿名对象,true (B2已经与A发⽣多态)17// System.out.println(new B1(){} instanceof A);//B1的已经确定类体的,即匿名⼦类对象,不能通过编译18 System.out.println(new B2(){} instanceof A);//B2的虽未匿名⼦类对象,但是却属于A的实现类,所以编译通过,结果为true19// System.out.println(new B3() instanceof A); //抽象类是不可以进⾏实例化的,编译失败20// System.out.println(new B3(){} instanceof A);//抽象类要产⽣匿名⼦类对象,必须复写所有抽象⽅法,编译失败21// System.out.println(new B3(){public void test(){}} instanceof A);//⾮A的匿名⼦类对象,编译失败22 System.out.println(new B4(){public void method(){}} instanceof A);//编译通过,结果为true23 }24 }25interface A{26 void method();27 }2829class B1{3031 }32class B2 extends B1 implements A{33 public void method(){}34 }35abstract class B336 {37 abstract void test();38 }39abstract class B4 implements A40 {4142 }43class C1{4445 }46final class D147 {48 }49final class D2 implements A{50 public void method(){}51 }3)接⼝与接⼝间,使⽤instanceof不存在编译问题,但是若使⽤匿名内部类则会编译失败1public class Test{2 public static void main(String[] args){3 A a =new C();4 System.out.println(a instanceof B); //编译通过.A可能与B发⽣多态,因为A的实现类有可能实现了B,结果为false 5 System.out.println(new A(){public void test(){}} instanceof B);//编译失败,⾮B的匿名⼦类对象,不存在多态6 }7 }8interface A{9 }10interface B{11 }12class C implements A{13 }。

Java程序设计基础习题答案

Java程序设计基础习题答案

Java程序设计基础课后习题参考答案第2章1. 关于Java Application 的入口方法main()的检验:main()方法的参数名是否可以改变?main()方法的参数个数是否可以改变?该方法名是否可以改变?参考答案:(1)main()方法的参数名可以改变。

(2)main()方法的参数个数不可以改变。

(3)该方法名不可以改变。

2. 当一个程序没有main()方法时,能编译吗?如果能编译,能运行吗?参考答案:当一个程序没有main()方法是,是可以编译通过的,但是不能给运行,因为找不到一个主函数入口。

3. 下列语句能否编译通过?byte i = 127;byte j = 128;long l1 = 999999;long l2 = 9999999999;参考答案:byte i 和long l1可以编译通过。

而byte j 和long l2 超出自身数据类型范围,所以编译失败。

4. 下列语句能否编译通过?float f1 = 3.5;float f2 = 3.5f;参考答案:java中浮点型的数据在不声明的情况下都是double型的,如果要表示一个数据是float型的,必须在数据后面加上“F”或“f”;因此,float f1 无法编译通过。

5. 验证int 和char,int和double等类型是否可以相互转换。

参考答案:(1)char类型可以转换为int 类型的,但是int类型无法转换为char类型的;(2)int 可以转换为double类型的,但是double类型无法转换为int 类型的。

6. 计算下列表达式,注意观察运算符优先级规则。

若有表达式是非法表达式,则指出不合法之处且进行解释。

(1) 4+5 == 6*2 (2) (4=5)/6(3) 9%2*7/3>17 (4) (4+5)<=6/3(5) 4+5%3!=7-2 (6) 4+5/6>=10%2参考答案:表达式(2)为不合法表达式,只能将值赋值给一个变量,因此其中(4=5)将5赋值给4是不合法的。

OOD经验原则总结

OOD经验原则总结

第2章类和对象:面向对象范型的建材所有数据都应当隐藏在他所在的类内部。

类的使用者必须依赖类的公有接口,但类不能依赖它的使用者。

尽量减少类的协议中的消息。

实现所有类都理解的最基本公有接口[例如:拷贝操作(深拷贝与浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。

不要把实现细节(例如放置共用代码的私有函数)放到类的共有接口中。

不要以用户无法使用或不感兴趣的东西污染类的公有借口。

类之间应该零耦合,或者只有导出耦合关系。

也即,一个类要么通另一个类毫无关系,要么只使用另一个类的公有接口中的操作。

类应当只表示一个关键抽象。

把相关的数据和行为集中放置。

把不相关的信息放在另一个类中(也即:互不沟通的行为)。

确保你为之建模的抽象概念是类,而不只是对象扮演的角色。

第3章应用程序布局:面向动作于面向对象在水平方向上尽可能统一的分布系统功能,也即:按照设计,顶层类应当统一的共享工作。

在你的系统中不要创建全能类/对象。

对名字包含Driver、Manager、System、Subsystem的类要特别多加小心。

对公共接口中定义了大量访问方法的类多加小心。

大量访问方法意味着相关数据和行为没有集中存放。

对包含太多互不沟通的行为的类多加小心。

互不沟通的行为是指在类的数据成员的一个真子集上进行操作的方法。

全能类经常有很多互不沟通的行为。

在由同用户界面交互的面向对象模型构成的应用程序中,模型不应该依赖于界面,界面则应当依赖于模型。

尽可能地按照现实世界建模(我们常常为了遵守系统功能分布原则、避免全能类原则以及集中放置相关数据和行为的原则而违背这条原则)。

从你的设计中去除不需要的类。

去除系统外的类。

不要把操作变成类。

质疑任何名字是动词或者派生自动词的类,特别时只有一个意义行为(即:不考虑存取和打印成员的行为)的类。

考虑一下那个有意义的行为是否应当迁移到已经存在或者尚未发现的某个类中。

我们在创建应用程序的分析模型时常常引入代理类。

day01课堂笔记

day01课堂笔记

今日内容介绍◆基础知识回顾◆继承今日学习目标◆能够解释类名作为参数和返回值类型◆能够理解匿名对象◆能够写出类的继承格式◆能够说出继承的特点◆能够说出子类调用父类的成员特点第1章基础知识回顾1.1类类:现实生活中一类事物的抽象描述;类的组成:构造方法、属性(成员变量)、成员方法;Public class 类名{构造方法、属性(成员变量)、成员方法;}对象:现实生活中的具体某个事物的体现;(个体)类与对象的关系:一个类可以创建多个对象,每一个对象必须有所属的类型;对象与对象的关系:每一个对象都是独立的个体;(对象中的成员变量互不影响);1.2构造方法构造方法的格式:Public 类名(参数列表){写代码;(通常是给成员变量赋值)}执行特点:在创建对象的过程中,由java虚拟机自动匹配对应的构造方法,并调用一次;构造方法的作用:1、创建对象;2、给成员变量赋值;构造方法与set方法的区别:1、构造方法是在对象创建的过程中对成员变量赋值;2、Set方法是对象创建成功后,修改对象中成员变量的值;1.3This关键字This是当前对象的引用;(哪个对象调用方法,那么它就是当前对象)每个对象中成员变量的值,互不影响;成员变量是随着对象的创建而产生,随着对象的死亡而死亡;1.4方法的参数与返回值的问题关于基本数据类型参数传递的规则:在一个方法内部,对基本数据类型(包含String)的变量的值,进行修改,不会对原方法的变量的值影响;关于引用数据类型参数传递的规则:在一个方法内部,对引用数据类型(不包含String)的变量的值,进行修改,会对原方法的变量的值影响;1.5匿名对象没有起名字的对象,就是匿名对象;Person p = new Person();new Person();匿名对象的特点:1、只能使用一次;2、必须在创建完之后立刻使用;匿名对象只是一个代码简写的形式第2章继承2.1组合的概念将两个独立的事物,硬组成在一起;在java中的代码体现:在一个类(A)中有另一个类(B),此时A类和B类就是组合关系;数据类型变量名;2.2继承描述类与类之间的一种关系;2.3继承的格式:使用关键字extendsPublic class 子类类名extends 父类类名{子类的成员;}2.4继承的思想子类可以直接使用父类非私有的属性和方法;父类是通过不同的子类不断的向上抽取而来;2.5练习子类直接使用父类成员在子类的方法内部可以直接调用父类的非私有的方法或属性;每个子类都可以拥有父类完整的一份,所有子类互不干涉;2.6继承的特点:1、java中类与类之间的继承只能是单继承;2、继承具有传递性;(孙子可以使用爷爷的成员)3、子父类是相对概念,只有Object是绝对父类;(任何一个类都直接或间接的继承了Object)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java匿名内部类主要原则
Java中的匿名内部类是一种特殊的内部类,它没有显式的类名,通常用于创建只需要使用一次的类的实例。

匿名内部类的主要原则
包括以下几点:
1. 用途,匿名内部类通常用于创建接口或抽象类的实例,可以
在需要的地方直接定义并实例化,而不必单独创建一个具名的类。

2. 语法,匿名内部类的语法比较简洁,使用关键字new同时创
建一个类的实例并定义其方法或属性。

3. 实现接口或继承类,匿名内部类可以实现接口或继承抽象类,并在其中实现接口方法或重写父类的方法。

4. 作用域,匿名内部类的作用域通常局限于创建它的方法或代
码块内部,不能在外部直接引用。

5. 闭包特性,匿名内部类可以访问外部类的成员变量和方法,
但需要将外部类的成员变量声明为final或者effectively final。

6. 实例化,匿名内部类在实例化的同时会创建一个新的类对象,每次实例化都会产生一个新的类,因此会增加类加载和内存消耗。

总之,匿名内部类主要原则包括其用途、语法、实现接口或继
承类、作用域、闭包特性和实例化等方面。

在实际应用中,我们需
要根据具体情况灵活运用匿名内部类,以提高代码的简洁性和可读性。

相关文档
最新文档