class修饰符public、private、protected、static、abstract

class修饰符的使用及区别

public、private、protected、static、abstract

public:可以继承、实例化

class Person {
	public name: string;
	constructor(thename: string) {
		this.name = thename;
	}
}
class Jack extends Person {
	age: number;
	constructor(name: string, age: number) {
		super(name)
		this.age = age;
	}
	say() {
		console.log(`my name is ${this.name}, age ${this.age}`);
	}
}
let p1 = new Person('tom');
console.log(p1.name); // tom
let j1 = new Jack('jacker', 10);
j1.say(); // my name is jacker age 10

  private 私有属性只能在基类中访问,不能在实例、派生类中访问

class Person {
	private name: string;
	constructor(thename: string) {
		this.name = thename;
	}
	sayname() {
		console.log(`my name is ${this.name}`);
	}
}
class Jack extends Person {
	age: number;
	constructor(name: string, age: number) {
		super(name)
		this.age = age;
	}
	say() {
		// 只能在Person中访问
		// console.log(`my name is ${this.name}, age ${this.age}`); // error
	}
}
let p1 = new Person('tom');
p1.sayname(); // tom
// console.log(p1.name); // tom // error 只能在Person中访问
let j1 = new Jack('jacker', 10);
j1.sayname(); // jacker

   protected 受保护的,可以被继承,在派生类中可以访问,子类、父类都不能实例访问

class Person {
	protected name: string;
	constructor(thename: string) {
		this.name = thename;
	}
	sayname() {
		console.log(`my name is ${this.name}`);
	}
}
class Jack extends Person {
	constructor(name: string) {
		super(name)
	}
	say() {
		// 只能在Person中访问
		console.log(`my name is ${this.name}`);
	}
}
let p1 = new Person('tom');
p1.sayname(); // tom
console.log(p1.name); // tom // error 只能在Person、子类中访问
let j1 = new Jack('jacker');
j1.say(); // jacker
console.log(j1.name); // error 只能在Person、子类中访问

  // static 只能通过基类、子类访问,实例不能访问

class Person {
	static myName: string;
	constructor(name: string) {
		Person.myName = name;
	}
	sayname() {
		return Person.myName;
	}
}
class Jack extends Person {
	constructor() {
		super('jacker');
	}
}
let p1 = new Person('tom');
p1.myName; // error Person上不存在myName属性
console.log(p1.sayname());// tom
// 在类的外部访问
console.log(Person.myName); // tom
let j1 = new Jack();
// 子类实例访问基类方法
console.log(j1.sayname()); // jacker
j1.myName // error Jack 上不存在myName属性
// 子类访问静态属性
console.log(Jack.myName); // jacker

   // abstract 抽象类中的抽象方法不包含具体实现并且必须在派生类中实现

abstract class Person {
	sayname() {
		console.log('my name is sayname');
	}
	// 抽象方法不具体实现
	abstract say(): void;
}
class Jack extends Person {
	// 子类必须实现父类抽象方法
	say() {
		console.log('my name is jacker');
	}
}
// let p1 = new Person(); // 抽象类不可以被实例化
let j1 = new Jack();
j1.sayname();
j1.say()

class修饰符的使用及区别

public、private、protected、static、abstract

public:可以继承、实例化

  1. // public可以继承、实例化
  2. class Person {
  3. public name: string;
  4. constructor(thename: string) {
  5. this.name = thename;
  6. }
  7. }
  8. class Jack extends Person {
  9. age: number;
  10. constructor(name: string, age: number) {
  11. super(name)
  12. this.age = age;
  13. }
  14. say() {
  15. console.log( `my name is ${this.name}, age ${this.age}`);
  16. }
  17. }
  18. let p1 = new Person( 'tom');
  19. console.log(p1.name); // tom
  20. let j1 = new Jack( 'jacker', 10);
  21. j1.say(); // my name is jacker age 10

private 私有属性只能在基类中访问,不能在实例、派生类中访问

  1. class Person {
  2. private name: string;
  3. constructor(thename: string) {
  4. this.name = thename;
  5. }
  6. sayname() {
  7. console.log( `my name is ${this.name}`);
  8. }
  9. }
  10. class Jack extends Person {
  11. age: number;
  12. constructor(name: string, age: number) {
  13. super(name)
  14. this.age = age;
  15. }
  16. say() {
  17. // 只能在Person中访问
  18. // console.log(`my name is ${this.name}, age ${this.age}`); // error
  19. }
  20. }
  21. let p1 = new Person( 'tom');
  22. p1.sayname(); // tom
  23. // console.log(p1.name); // tom // error 只能在Person中访问
  24. let j1 = new Jack( 'jacker', 10);
  25. j1.sayname(); // jacker

  protected 受保护的,可以被继承,在派生类中可以访问,子类、父类都不能实例访问

  1. class Person {
  2. protected name: string;
  3. constructor(thename: string) {
  4. this.name = thename;
  5. }
  6. sayname() {
  7. console.log( `my name is ${this.name}`);
  8. }
  9. }
  10. class Jack extends Person {
  11. constructor(name: string) {
  12. super(name)
  13. }
  14. say() {
  15. // 只能在Person中访问
  16. console.log( `my name is ${this.name}`);
  17. }
  18. }
  19. let p1 = new Person( 'tom');
  20. p1.sayname(); // tom
  21. console.log(p1.name); // tom // error 只能在Person、子类中访问
  22. let j1 = new Jack( 'jacker');
  23. j1.say(); // jacker
  24. console.log(j1.name); // error 只能在Person、子类中访问

// static 只能通过基类、子类访问,实例不能访问

  1. class Person {
  2. static myName: string;
  3. constructor(name: string) {
  4. Person.myName = name;
  5. }
  6. sayname() {
  7. return Person.myName;
  8. }
  9. }
  10. class Jack extends Person {
  11. constructor() {
  12. super( 'jacker');
  13. }
  14. }
  15. let p1 = new Person( 'tom');
  16. p1.myName; // error Person上不存在myName属性
  17. console.log(p1.sayname()); // tom
  18. // 在类的外部访问
  19. console.log(Person.myName); // tom
  20. let j1 = new Jack();
  21. // 子类实例访问基类方法
  22. console.log(j1.sayname()); // jacker
  23. j1.myName // error Jack 上不存在myName属性
  24. // 子类访问静态属性
  25. console.log(Jack.myName); // jacker

 // abstract 抽象类中的抽象方法不包含具体实现并且必须在派生类中实现

  1. abstract class Person {
  2. sayname() {
  3. console.log( 'my name is sayname');
  4. }
  5. // 抽象方法不具体实现
  6. abstract say(): void;
  7. }
  8. class Jack extends Person {
  9. // 子类必须实现父类抽象方法
  10. say() {
  11. console.log( 'my name is jacker');
  12. }
  13. }
  14. // let p1 = new Person(); // 抽象类不可以被实例化
  15. let j1 = new Jack();
  16. j1.sayname();
  17. j1.say();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
定义类 •定义类的语法格式: •[修饰符] class 类名 {….类体…..} •类体可以由多个属性、方法、构造器组成。 •注意:类的修饰符可以是public、final 或省略这两个。类名只要是合法的标识符. •一个类里可以包含三种最常见的成员:构造器、属性、方法。 定义属性的格式语法 •[修饰符] 属性类型 属性名 [= 默认值]; 定义方法的格式语法 •[修饰符] 方法返回值类型 方法名(形参列表) {….方法体….} – 方法中的修饰符可以是public ,protected,private,static,final,abstract,其中访问控制符只能出现一 个,abstract ,final 只能出现其一. –返回值类型可以是基本类型和引用类型,如果无返回值,要用void 来声明 –形参列表,可以由零到多组组成,参数之间用逗号(“,”)隔开. –static 是一个特殊的关键字,译为”静态”,所有有static 修饰的叫类属性,类方法,类成员. 定义构造器的语法格式 •[修饰符] 构造器名(形参列表) {……} –修饰符可以是public protected private 构造器必须和类名相同,形参和方法的形参一样. 对象的产生和使用 •创建对象的根本途径就是构造器,所以创建对象通过关键字new 加上对应的构造器即可. •如果访问权限允许,类里定义的属性和方法可以通过类或实例来调用, •有static 修饰的访求和属性,既可通过类来调用,也可以通过实例来调用. 对象.引用和指针 •Person p = new Person();,这行代码创建了一个Person 实例,也被称为对象,这个对象被赋给了p变量. •也就是说引用型变量里存放的仅仅是一个引用,它指向实际的对象. 对象的this 引用 •this 关键字总是指向调用该方法的对象.   –1.构造器中引用该构造器执行初始化的对象   –2.在方法中引用调用该方法的对象 •在方法里的this 指谁调用就指谁 •注: this 不能用在有static 修饰的方法中. 方法的详解 •方法的所属性   –一旦将一个方法定义在一个类里,如果用static 修饰了,这个方法属于这个类,否则属于这个类的对象.   –方法不能独立执行,必须要有调用者.(如:类.方法、对象.方法)   –方法不能独立定义,只能定义在类里.   –方法要么属于一个类,要么属于一个对象 方法的参数传递机制 传递方式只有一种:值传递. 形参长度可变的方法 •如果在定义方法时,在最后一个参数的类型后增加三点…,则表明该形参接受多个参数值,多个参数值被当成数组传   入. •长度可变的形参只能位于最后一个参数,并一个方法里只能有一个可变长度的参数. 递归 •递归就是在方法中再次调用自己。 •递归一定要向已知方向递归. 方法的重载 •Java 允许在一个类里定义多个同名方法,只要形参列表不同即可. •所以方法的重载只要满足两个条件(两同一不同):1.同一个类中,方法名相同;2.形参不同。和返回值类型无关.   所以在调用这些方法时要传入不同的参数值. 成员变量和局部变量 •成员变量指的是在类范围里定义的变量;局部变量指的是在一个方法内定义的变量。 •不管是成员变量还是局部变量都遵守相同的命名规则。 •成员变量分为类属性和实例属性.对于类属性无论通过类还是对象来访问都是访问同一个对象,只要一个对象改变 了类属性,那么其他对象对应的类属性也改变了.成员变量不用显式初始化,只要定义了一个类属性或实例属性,系统 默认进行初始化。 局部变量 •局部变量可分为三种:   –形参   –方法局部变量   –代码块局部变量. •与成员变量不同的是除了形参外,其他局部变量都必须显式地初始化, •Java 里允许局部变量和成员变量重名。这样局部变量会覆盖成员变量,这时通过this 来调用实例的属性. 成员变量的初始化 •当类被加载时,类成员就在内存中分配了一块空间。 •当对象被创建时,实例成员就在内存中分配了内存空间。 •实例变量与实例共存亡;类变量与类本身共存亡。 局部变量的运行机制 •局部变量仅在方法内有效。 •当方法执行完成时,局部变量便会自动销毁。 封装 •理解封装:封装是面向对象的三大特征之一。 • 封装包含两方面含义:   –合理隐藏。   –合理暴露。 本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pipi-changing/ 使用访问控制符 •private 私有的。在同一个类里能被访问。 •default 默认的。包访问权限 •protected 受保护的。子类中也能访问 •public 公共的。在任何地方都可以访问 package 和 import •package 打包格式:package 包名;放在程序开始的顶端。 •包机制的两个方面的保证。1.源文件里要使用package 语句指定包。2.class 文件必须放在对应的路径下。 •import 引入包格式。分为两种:   –非静态导入,导入的是包下所有的类。如:import package.subpackage.*;   –静态导入,导入的是类的静态属性。如:import static package.className.*; Java 的常用包 •java.lang.*, •java.util.*, •java.net.* , •java.io.*, •java.text.*, •java.sql.*, •java.awt.*, •java.swing.*. 使用构造器执行初始化 •构造器最大的用处就是在创建对象时执行初始化,系统会默认的进行初始化。 •如果程序员没有Java 类提供任何构造器,则系统会为这个类提供一个无参的构造器。 •一旦程序员提供了自定义的构造器,遇系统不再提供默认的构造器。 构造器的重载 •构造器的重载和方法的重载一样,都是方法名相同,形参列表不相同。 •在构造器中可通过this来调用另外一个重载的构造器。 继承的特点 •Java通过关键字extends来实现,实现继承的类称为子类,被继承的类称为基类、超类、父类。父类是大类,子   类是小类。 •Java的继承是单继承,每个子类最多只有一个直接父类。 本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pipi-changing/ 继承 •子类继承父类的语法格式如下: •修饰符 class subclass extends superclass {。。。。。。} •子类扩展了父类,将可以获得父类的全部属性和方法,但不能获得父类构造器 •Java里的继承都是单继承,也就是只能有一个直接的父类,可以有n个间接父类。 重写父类的方法 •方法的重写要遵循“两同两小一大” 指的是:方法名相同,形参列表相同。返回值类型更小或相同,抛出的异常更   小或相同,访问控制权限要更大。 父类实例的super限定 •通过关键字super 来调用父类的方法或属性。 super调用父类的构造器 •子类构造器总会调用父类构造器。 •如果子类构造器没有显式使用super调用父类构造器;子类构造器默认会调用父类无参数的构造器。 •创建一个子类实例时,总会先调用最顶层父类的构造器。 多态性 •Java 引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类   型决定,运行时的类型由实际赋给该变量的对象决定。 •如果编译时类型和支行时的类型不一致,这就有可能出现所谓的多态。 •两个相同类型的引用变量,由于它们实际引用的对象的类型不同,当它们调用同名方式时,可能呈现出多种行为   特征,这就是多态。 引用变量的类型转换 •将一个子类对像赋给父类,这就是向上转型。向上转型是自动的。 •强制类型转换: 类型转换运算符是小括号,语法如下(type)variable; instanceof运算符 •前一个操作通常是一个引用类型的变量,后一个操作通常是一个类(也可以是接   口)。如果是 返回true, 否返回false。 继承和组合 •使用继承的注意点 •利用组合实现复用:总之,继承要表达的是一种“是(is-a)”的关系,而组合表达的是”有(has-a)“的关系。 本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pipi-changing/ 初始化块 •使用初始化块:初始化块由大括号括起{…},只能由static修饰。 •初始化块和构造器:初始化块总在构造器之前执行,初始化块不能接受形参。 静态初始化块 •用static修饰的初始化块为静态初始化块,由于是静态的,所以是属于类,当类加载时,就执行静态初始化块 ,   但执行一个子类时,最先执行其最顶层父类的静态初始化, •初始化块是属于实例 的。只要创建一次对象,初始化块就执行一次。 下面贴出代码: Dog DogTest Person PersonTest ReturnThis StaticAccessNonStatic ThisInConstructor Overload OverloadVarargs PrimitiveTransferTest Recursive ReferenceTransferTest Varargs 复制代码 public class BlockTest { public static void main(String[] args) { { // 定义一个代码块局部变量a int a; // 下面代码将出现错误,因为a变量还未初始化 // System.out.println("代码块局部变量a的值:" + a); // 为a变量赋初始值,也就是进行初始化 a = 5; System.out.println("代码块局部变量a的值:" + a); } // 下面试图访问的a变量并不存在 // System.out.println(a); } // 代码块局部变量a的值:5 } 复制代码 。。。。。。。。。。。。。。。。。。。
1、面向对象的特征有哪些方面? 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 4、float f=3.4;是否正确? 5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 6、Java有没有goto? 7、int和Integer有什么区别? 8、&和&&的区别? 9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少? 11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 12、用最有效率的方法计算2乘以8? 13、数组有没有length()方法?String有没有length()方法? 14、在Java中,如何跳出当前的多重嵌套循环? 15、构造器(constructor)是否可被重写(override)? 16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 17、是否可以继承String类? 18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 19、String和StringBuilder、StringBuffer的区别? 20、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 21、描述一下JVM加载class文件的原理机制? 22、char 型变量中能不能存贮一个中文汉字,为什么? 23、抽象类(abstract class)和接口(interface)有什么异同? 24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 25、Java 中会存在内存泄漏吗,请简单描述。
第三章 Java面向对象程序设计 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第1页。 3.1 面向对象程序设计的基本概念 对象是客观世界中的某个具体事物。(客车) 事物的特性就是数据(载客数量、燃料容量、耗油均值) 事物的行为就是方法 (行驶、起动、刹车) 数据 方法 面向对象的程序设计方法就是将客观事物抽象成为"类",并通过类的"继承"实现软件的可扩充性和可重用性。 对象 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第2页。 类和对象 类是具有共同特性和行为的事物的抽象,是一种特殊数据类型。在类中包含了数据和与数据有关的操作(方法)。 对象是类的实例。 类 汽车 对象 客车 抽象 实例化 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第3页。 面向对象程序设计的核心技术 封装、继承、多态性 通过封装可以隐藏类的实现细节,也可以避免对类中数据的直接操作。类是封装的基本单元。 继承是对类的功能的重用和扩充。 多态性是指方法的名字相同,但实现不同。 Java是一种完全面向对象的程序设计语言。它继承了C++的优点。Java降低了程序的复杂性,实现了代码的可重用性,提高了运行效率。 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第4页。 3.2 类的创建 类的声明格式: <类首声明> {<类主体>} 类首声明定义类的名字、访问权限以及与其它类的关系等。 类主体定义类的成员,包括变量(数据)和方法(行为) Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第5页。 类首声明: [<修饰符>] class <类名> [extends <超类名>] [implements <接口名>] class: 类定义的关键字; extends: 表示类和另外一些类(超类)的继承关系; implements: 表示类实现了某些接口; 修饰符: 表示类访问权限(publicprivate等)和一些其它特性(abstract、final等); 例如: public class Date1 声明Date1类,访问权限为public,表示类Date1可以被该类所属的包之外的类使用。 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第6页。 类主体的结构: <类首声明> {    //类首,以下为类主体 <成员变量的声明> <成员方法的声明及实现> } 成员变量即类的数据,反映了类的属性和状态。 成员方法即类的行为(对数据的操作) 例4.2.1:声明一个日期类Date1 public class Date1 { int year,month,day; //成员变量 public void today( ) { //成员方法 System.out.println("Date is"+year+"/"+month+"/"+day); } } Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第7页。 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第8页。 成员变量的声明格式: [<修饰符>] [static] [final] [transient] <变量类型> <变量名> static: 表示是一个类成员变量(静态变量); final: 表示是一个常量; (最终成员变量) 例:final double PI=3.1415926; transient: 表示一个临时变量 修饰符: 表示变量的访问权限(缺省访问、publicprotectedprivate) 作用域:整个类。同一类中的所有方法都可以对其访问。并可简单地通过名字来引用。(在方法体内定义的变量是方法变量,作用域只能在方法体内) 例:class Sampleclass{ public int I; method(){ int j; } } Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第9页。 成员方法的声明格式: [<修饰符>]<返回类型> <方法名> ([<参数表列>]) [throws <异常类>] { 方法体 } 修饰符: 方法的访问权限(缺省的、publicprotectedprivate) static: 类方法(静态方法); abstract: 抽象方法(无方法体的方法); final: 最终方法(不能被子类改变)。 throws: 表示抛出异常 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第10页。 public class Date2 { int year,month,day; //设置某一天日期的方法 public voi
一卷 一、简答题 1. 什么是类?什么是对象? 2. 方法的重载和覆盖(重写)有什么区别? 3. 简述抽象类与接口的异同。 4. 简述JDBC访问数据库的步骤。 二、编程题 1. 定义一个类Circle,计算并输出圆(半径=3)的面积 2. 在D盘创建文件test.txt,文件中的内容为Hello,world!,然后利用输入流输出流把文 件拷贝到E盘根目录下。 卷一答案 一、简答题1. 什么是类?什么是对象? 类是对某一类事物的描述,是抽象的、概念上的定义; 对象是实际存在的该类事物的每个个体,也称实例。 2. 方法的重载和覆盖(重写)有什么区别? 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后 者实现的是运行时的多态性。 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不 同或者二者都不同)则视为重载;重载对返回类型没有特殊的要求。 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回 类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。 3. 抽象类与接口的异同 抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实 现,否则该类仍然需要被声明为抽象类。 接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法, 而接口中不能定义构造器而且其中的方法全部都是抽象方法。 抽象类中的成员可以是private、默认、protectedpublic的,而接口中的成员全都是 public的。 抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的 类必须被声明为抽象类,而抽象类未必要有抽象方法。 4. 简述JDBC访问数据库的步骤 a) 加载JDBC驱动程序 b) 建立数据库连接 c) 创建Statement对象 d) 执行SQL语句 e) 处理返回结果 f) 关闭创建的对象 二、编程题 1. public class Circle { double radius; public Circle(double r){ radius=r; } public double area(){ return 3.14*r*r; }(8分) public static void main(String[] args) { Circle c=new Circle(3); System.out.println("圆的面积是"+c.area()); } }(7分) 2. public class FileCopy { public static void main(String[] args) { try { FileInputStream in=new FileInputStream("d:\\test.txt"); FileOutputStream out=new FileOutputStream("e:\\test.txt"); int c; while((c=in.read())!=-1){ out.write(c); } in.close(); out.close(); } catch (Exception e) { e.printStackTrace(); } } } 卷二 一、选择题 1.Java程序的跨平台特性是由( )支持的。 A.JVM B.编译器 C.IE浏览器 D.面向对象 2.下面定义一个整型数组,不合法的是( )。 A.int array[][]=new int[2][3]; B.int array[][]=new int[6][]; C.int [][]array=new int[3][3]; D.int [][]array=new int[][4]; 3.Java中,访问修饰符限制性最高的是( )。 A.private B.protected C.public D.friendly 4.关键字supper的作用是( )。 A.用来访问父类被隐藏的成员变量 B.用来调用父类中被重载的方法 C.用来调用父类的构造函数 D.以上都是 5.下面关于类及其修饰符的一些描述,不正确的是( )。 A.abstract只能用来派生类,不能创建abstract类的对象 B.final修饰的类不能用来派生子类 C.abstract可与final同时修饰一个类 D.abstract方法必须在abstract类中声明,但abstract类定义中可以没有abstract方法 6.下面( )关键字用来标明一个方法可能抛出各种异常。 A.try B.throws C.throw D.catch 7.下面用于创建动态数组的集合类是(
8 / 12 如果您需要使用本文档,请点击下载按钮下载! 北邮高级语言程序设计(基于Java)第三次阶段作业 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第1页。 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第1页。 一、单项选择题(共20道小题,共100.0分) 下面哪个修饰符修饰的变量是所有同一个类生成的对象共享的?____ public private static final 知识点: 第三单元过关自测 学生答案: [A;] 得分: [5] 试题分值: 5.0 提示: 以下哪个接口的定义是正确的_____ interface A {void print() { } ;} abstract interface A {void print() ;} abstract interface A extends I1, I2 // I1、I2为已定义的接口 abstract void print(){ };} interface A {void print();} 知识点: 第三单元过关自测 学生答案: [D;] 得分: [5] 试题分值: 5.0 提示: 下列说法正确的是____ 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第2页。子类只能覆盖父类的方法,而不能重载 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第2页。 子类只能重载父类的方法,而不能覆盖 子类不能定义和父类名同名同形参的方法,否则,系统将不知道使用哪种方法 重载就是一个类中有多个同名但有不同形参和方法体的方法 知识点: 第三单元过关自测 学生答案: [D;] 得分: [5] 试题分值: 5.0 提示: 在调用构造函数时,____ 子类可以不加定义就使用父类的所有构造函数 不管类中是否定义了何种构造函数,创建对象时都可以使用默认构造函数 先调用父类的构造函数 先调用形参多的构造函数 知识点: 第三单元过关自测 学生答案: [A;] 得分: [5] 试题分值: 5.0 提示: 方法的作用不包含____ 使程序结构清晰 功能复用 代码简洁 重复代码 知识点: 第三单元过关自测 学生答案: [D;] 得分: [5] 试题分值: 5.0 提示: 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第3页。 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第3页。 构造函数在____时被调用 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第4页。创建对象时 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第4页。 类定义时 使用对象的方法时 使用对象的属性时 知识点: 第三单元过关自测 学生答案: [A;] 得分: [5] 试题分值: 5.0 提示: return语句____ 可以让方法返回数值 方法都必须包含 方法中不可以有多个return语句 不能用来返回对象 知识点: 第三单元过关自测 学生答案: [A;] 得分: [5] 试题分值: 5.0 提示: 方法的形参____ 必须定义多个形参 至少有一个 可以没有 只能是简单变量 知识点: 第三单元过关自测 学生答案: [C;] 得分: [5] 试题分值: 5.0 提示: 方法内的变量____ 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第5页。一定在方法内所有位置可见 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第5页。 可能在方法内的局部可见 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第6页。可以在方法外可见 北邮高级语言程序设计(基于Java)第三次阶段作业全文共14页,当前为第6页。 方法外也可以 知识点: 第三单元过关自测 学生答案: [B;] 得分: [5] 试题分值: 5.0 提示: 下列声明正确的是____ Abstract final class Hh{……} Abstract private move(){……} Protected private number; Public abstract class Car{……} 知识点: 第三单元过关自测 学生答案: [B;] 得分: [5] 试题分值: 5.0 提示: 被声明为privateprotectedpublic的类成员,在类外部____ 只能访问声明为public的成员 只能访问到声明为protectedpublic的成员 都可以访问 都不可以访问 知识点: 第三单元过关自测 学生答案: [A;] 得分: [5] 试题分值: 5.0 提示: 关于main()的说法正确的是_
在 Java 中,修饰符可以混用,但是有一些限制和规则需要遵守: 1. 访问修饰符只能使用一个。例如,一个方法只能被 `public`、`protected` 或 `private` 中的一个修饰符修饰。 2. 非访问修饰符可以使用多个。例如,一个方法可以被同时修饰为 `static` 和 `final`。 3. 修饰符的顺序可以任意排列,但是建议按照约定的顺序放置。例如,方法的修饰符顺序通常是 `public`、`protected` 或 `private`,然后是 `abstract`、`static`、`final` 和 `synchronized`。 4. 局部变量不能被访问修饰符修饰,只能被 `final`、`volatile` 或 `transient` 等非访问修饰符修饰。 5. 接口中的方法默认为 `public abstract`,属性默认为 `public static final`,因此这些修饰符可以省略。 下面是一个示例代码,展示了修饰符的混用: ```java public class MyClass { private static final int MAX_VALUE = 100; public synchronized void doSomething() { // 方法体 } public static void main(String[] args) { final String name = "John"; volatile int count = 0; // 其他代码 } } ``` 在这个例子中,`MyClass` 类的 `doSomething()` 方法同时使用了 `public` 和 `synchronized` 修饰符,`MAX_VALUE` 属性使用了 `private`、`static` 和 `final` 修饰符,`main()` 方法中的 `name` 变量使用了 `final` 修饰符,`count` 变量使用了 `volatile` 修饰符。这些修饰符的顺序可以任意排列,但是为了代码可读性和规范性,建议按照约定的顺序放置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值