`

JAVA访问修饰符 构造函数的问题

阅读更多

JAVA访问修饰符 构造函数的问题

JAVA访问修饰符:
----------
[public | default | protected | private ]

public: 完全开发       

protected: 同包及子类访问
default(无): 同包访问
private: 只能本类访问

1、JAVA用于类的修饰符(2个)和限定符(2个):
---------------
public: 完全开发     如:A.java里面的     class A{  }没有写public ,默认为public
default ():  同包访问

abstract: 指定为抽象类
final: 指定为最终类(太监类,密封类),没有子类

2、构造方法修饰符

public

protected

default

private

3、JAVA用于成员变量的修饰符:
---------------------
[public | protected | private ][static] [final] [transient] [volatile] int i;

限定词含义:
      static: 类属性(C#静态字段),可通过类名直接调用
  final: 该成员不能被重写,即定义常量(相当于C#的Const的用法)
  transient: 不序列化
  volatile :可被多个线程访问 (同步变量)


4、JAVA用于成员方法的修饰符:
----------------------
[public | protected | private ]   [static] [final| abstract] [native] [synchronized] method(int i){ }
  
限定词含义:
       static: 类(静态)方法,可通过类名直接调用
  final: 方法不能被重写(类似C#中的sealed 密封方法)
    native: 集成其它语言的代码 本地方法
    abstract: 抽象方法,没有方法体
    synchronized: 控制多个并发线程的访问 (同步方法)

 

 

 

一、java修饰符分为访问控制符和非访问控制符
(一)访问控制符  :public、protected、default、private;不加其他三个控制符则默认为default
            包外   子类     包内    类内  使用对象
public      可     可       可      可    类、接口、构造器、成员(全局变量、方法)
protected   否     可       可      可    构造器、成员(全局变量、方法)
default     否     否       可      可    类、接口、构造器、成员(全局变量、方法)
private     否     否       否      可    构造器、成员(全局变量、方法)
(二)非访问控制符:final、abstract、static、transient、volatile、native、synchronized、strictfp
1、final         :最终修饰符;使用对象为类、成员(全局变量、方法)、局部变量
2、abstract      :抽象修饰符;使用对象为类、接口、方法
3、static        :静态修饰符;使用对象为类、成员(全局变量、方法)
4、native        :本地修饰符;使用对象为方法
5、synchronized  :同步修饰符;使用对象为方法
6、transient     :暂时性修饰符;使用对象为方法
7、strictfp      :精确浮点修饰符;使用对象为类、接口、方法
8、volatile      :易失(共享)修饰符;使用对象为全局变量
二、换个角度看修饰符
(一)类修饰符      :public、default、abstract、final、strictfp
(二)接口修饰符    :public、default、abstract、strictfp
(三)构造器修饰符  :public、protected、default、private
(四)全局变量修饰符:public、protected、default、private、static、transient、volatile、final
(五)方法修饰符    : public、protected、default、private、abstract、static、final、native、synchronized、strictfp
(六)内部类        :public、protected、default、private、static、abstract、final
(七)局部变量修饰符:final

在 Java 中,无论是 explicit 还是 implicit 方式,都要求在子类的构造方法中调用其父类的构造方法。

如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果 父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句 中进行调用。 究其原因,想必是 Java 语言设计者,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。试想,如果没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果。

 http://shukuiyan.iteye.com/blog/1007808

 

1 构造函数必须满足的语法规则:方法名必须与类名相同;不要声明返回类型;不能被static、final、synchronized、abstract、native等修饰。

 

2 构造方法可以被重载,来表达对象的多种初始化行为。在重载构造方法中可以使用this语句来调用其他构造方法,使用时应该注意:如果在构造方法中使用了this语句,则必须作为构造方法的第一条语句;只能在一个构造方法中用this语句来调用类的其他构造方法,而不能在成员方法中调用类的构造方法;只能通过this语句来调用其他构造方法,不能通过方法名来直接调用构造方法。

 

3 在java中,如果用户定义的类中没有提供任何构造方法,java语言会自动提供一个默认的构造方法,该默认构造方法没有参数,用public修饰,且方法体为空。当然,程序中也可以显示的定义默认构造方法。

 

4 如果类中显示定义了一个或多个构造方法,并且所有的构造方法都带有参数,那么这个类就失去了java语言为其准备的默认构造方法,此时若使用该类的默认构造方法(即不含参数的构造方法)时就是编译出错。

 

5 父类的构造方法不能被子类继承,但是,在子类的构造方法中可以通过super语句调用父类的构造方法。使用super语句应该注意:在子类的构造方法中使用super语句,它必须作为第一条语句。

 

6 在创建子类的对象时,java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法,在多级继承的情况下,将从继承树的最上层得父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确的初始化。

 

7 如果子类的构造方法中没有用super语句显示调用父类的构造方法,那么通过这个构造方法创建子类对象时,java虚拟机会自动先调用父类的默认构造方法,而此时若父类没有默认构造方法时,就是编译出错。例如

 

public class B extends A{

    B(int i) {//该构造方法没有super显示调用父类的构造方法,将自动调用父类的默认构造方法,而父类A没有默认构造方法,这里将编译错误

       System.out.println(i);

    }

    public static void main(String[] args) {

       B b=new B(2);

    }

}

class A{//该类定义了含参数的构造方法,就失去了默认的无参的构造方法

    int i;

    A(int i){

       this.i=i*2;

    }

}

 

8 构造方法被调用的几种方式:当前类的其他构造方法通过this语句调用它;

当前类的子类的构造方法通过super语句调用它;在程序中通过new语句调用它。

 

9构造方法可以处于public、protected、private和默认四种访问级别之一。当构造方法为private级别时,意味着只能在当前类访问它,不能被继承,不能被其他程序用new创建实例对象。可以对比其他几种修饰符的作用:abstract修饰的类,不允许被实例化,这点和private修饰构造方法相同,但abstract修饰的类可以被继承,拥有子类,可以创建子类的实例;final类禁止被继承,这点和private修饰构造方法相同,但是final类可以用new创建实例对象。
分享到:
评论

相关推荐

    【独家高薪面试题库】与【实战配套练习演练】6.静态变量访问修饰符1

    在超类中声明受保护的变量,方法和构造函数只能由其他包中的子类或受保护成员类的包中的任何类访问。Java提供了这些修饰符,用于提供除访问修饰符之外的功能,同步sy

    《java面向对象程序设计-继承和多态》教案.doc

    构造函数在创建对象时初始化对象 包可用package 来申明 ,可用import 来导入包 目标 理解继承及其特点 运用JAVA程序实现继承 理解多态及其特点设计 运用JAVA程序实现多态 掌握访问修饰符和方法修饰符 继承 继承的...

    src.zip Java的面向对象编程·讲解代码

    包和访问修饰符 构造函数和析构函数 成员变量和局部变量的区别? 适用人群: 这段语言描述的Java的面向对象讲解代码源码资源适用于那些对面向对象编程(Object-oriented programming, OOP)有一定了解的Java开发者...

    Java语言学习教程大纲及实例

    - 访问修饰符(public, private, protected, default) 3. **面向对象编程(OOP)概念**: - 类与对象的关系 - 封装(Encapsulation) - 继承(Inheritance) - 多态(Polymorphism) - 抽象类与接口...

    实验三:Java类与对象

    本次实验进一步学习了Java的相关知识,深入理解了面向过程与面向对象语言的区别,了解了面向对象语言的三大特征,掌握类的声明和构造方法...掌握函数重载的方法,理解4种访问修饰符的区别,提高了Java语言的编程能力。

    java实现源码转补码-Java-Cheatsheet:Java笔记备忘单,侧重于基础知识和有用的面试技巧

    没有访问修饰符 访问修饰符确定。 对类中的所有方法和构造函数可见。 访问修饰符确定。 对类中的所有方法和构造函数可见。 没有默认值。 有默认值。 有默认值。 访问修饰符和可见性 不适用 上市 受保护 默认 私人的 ...

    java方法总结(重载,构造方法,调用方法)

    访问权限 [修饰符] 返回值类型 方法名(参数列表){ ... 方法体 ... } 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。例如:private(私有)、default(默认)、public(公共)...

    Java2游戏编程.pdf

    3.3.1 构造函数方法 3.3.2 访问方法 3.3.3 类方法 3.3.4 “其他”方法 3.4 继承 3.5 抽象类 3.6 类修饰符 3.7 接口 3.8 快捷地创建类 3.9 包 3.10 总结 3.11 练习 第4章 Java API为你服务:常用Java类 4.1 java.lang...

    GLAU_BCSC0002:这是GLA大学2019面向对象编程BCSC0002课程的官方资源库

    GLA大学,2019面向对象编程(BCSC... 使用Java实现面向对象的编程:定义类和方法,创建类的对象,Java中的访问修饰符简介。 Java中的构造函数:构造函数简介,用法,声明,方法与构造函数之间的差异,构造函数的类型

    java面试800题

    在类方法中(static),不能使用this或super修饰符 " Q0045 Java中是怎样捕获异常的? "try { //statement01 } catch(Exception e) { //statement02 } finally { //statement03 }" Q0046 一个文件中是否可以有多个...

    Java-Seminar:2018 Java研讨会

    : 第一周:安装Java SDK和Eclipse IDE 第2周1:变体,操作员,控制台I / O 第2周2:范围,流量控制,数组第3周:类,方法/构造函数,扩展,接口,参数传递第3周2:静态,访问修饰符第4周1:异常控制,线程第5周1:...

    java二八杠源码-java-II-notes:java-II-notes

    项:使用访问修饰符:private、protected、public。 有两个级别的访问控制 顶级(公共或包私有) 成员级别(公共、私有、受保护或包私有) 如果未指定访问修饰符,则始终默认为 package-private。 所以: 如果一个类...

    java培训机构内部预习文档

    面向对象三大特性 封装、继承、多态、对象创建过程、访问修饰符、super关键字、方法重写、instanceof chp8.三个修饰符 static、final、abstract chp9.接口 基本语法、接口的作用、解耦合 chp10.常用类 内部类、...

    北邮高级语言程序设计(基于Java)第三次阶段作业.docx

    一、单项选择题(共20道小题,共100.0分) 下面哪个修饰符修饰的变量是所有同一个类生成的对象共享的?____ public private static final 知识点: 第三单元过关自测 学生答案: [A;] 得分: [5] 试题分值: 5.0 提示: ...

    JAVA面试题最全集

    访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一个类或者方法时,有何意义? 48.掌握类和对象的概念,掌握面向对象编程的本质 49.静态变量和静态方法的意义,如何引用一个类...

    Java 基础之面向对象编程教程

    Java 基础之面向对象编程教程,主要类和对象、如何定义类、成员函数、访问控制修饰符、构造方法、类变量、类方法、方法重载、方法覆盖、抽象、封装、继承、多态、抽象类、接口和New 运算符等概念的介绍和例题介绍...

    java_oop_review

    注意:不设置访问修饰符;默认情况下,访问修饰符被保护。 Getters和Setters-将允许您获取和设置现有的私有属性。 方法重载-创建另一个具有相同名称但参数不同的方法。 方法覆盖–在不同的子类中重新创建整个方法。...

    Java程序设计习题(含答案解析).doc

    有的类定义时可以不定义构造函数,所以构造函数不是必需的。( F ) 3.类及其属性、方法可以同时有一个以上的修饰符来修饰。( T ) 4.Java的屏幕坐标是以像素为单位,容器的左下角被定为坐标的起点。( F )(应该是左上...

    java线程池源码解读-java-course-outline:java课程大纲

    java线程池源码解读Java 新手到精通(行业兼容)课程大纲 标题 分解 时间 1 介绍 为什么选择 ...访问控制、修饰符、方法 访问器和修改器的设计 克隆对象/浅层和深层克隆 5 异常处理 异常背后的想法

    疯狂JAVA讲义

    6.10 修饰符的适用范围 233 6.11 使用JAR文件 234 6.11.1 jar命令详解 235 6.11.2 创建可执行的JAR包 237 6.11.3 关于JAR包的技巧 238 6.12 本章小结 239 本章练习 239 第7章 Java集合 240 7.1 Java集合概述...

Global site tag (gtag.js) - Google Analytics