java面向对象之关键字,权限修饰符

Posted donghongbo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面向对象之关键字,权限修饰符相关的知识,希望对你有一定的参考价值。

1.关键字:this,static,package,import
this:
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!
package:
便于管理大型软件系统中数目众多的类, 解决类名重名的现象;
static(不在堆里面也不在栈里面, 在数据区(data seg)):
如果声明了静态方法或变量,值是放在方法区,因为方法区是一个数据共享区;所以不管什么变量访问它,都是同一份.
在静态方法中不能直接访问实例方法和实例变量.
在静态方法中不能使用 this 和 super 关键字.
静态方法不能被 abstract 修饰.
静态的成员变量可以使用类名或者是对象进行访问,非静态成员变量只能使用对象进行访问.
静态函数可以直接访问静态的成员,但是不能够直接访问非静态成员.,非静态函数可以访问静态和非静态成员.
当类被加载时,静态代码块只能被执行一次。类中不同的静态方法代码块按他们在类中出现的顺序被依次执行.
当多个修饰符连用时,修饰符的顺序可以颠倒,不过作为普遍遵守的编码规范,通常把访问控制修饰符放在首位,其次是 static 或 abstac修饰符,接着就是其他的修饰符

import:
import关键字是用来导入包的,因为实际开发中,你不可能把所有的类都放在同一个default包里面。
包的作用就是给java类进行分拣,不同业务逻辑的java类放在同一个包中。比如工具包,实体包。

2.访问控制, 权限修饰符(private default protected public)
作用:用于控制被修饰变量,方法,类的可见范围。

puclic class 类名 {
  private 类型 属性1;    //私有的,只有本类能访问。
  default 类型 属性2; //同一个包可以访问,不同包的字父类不能访问
  protected 类型 属性3; //不同包的字父类可以访问得到,但是不同包的其他内容不能访问到
  public 类型 属性4;//没有限制,所以都能访问到。public不是白叫的。

//set, get的用法
//在一个类被继承之后,我们可以在它的子类中,重新对父类的某些属性进行重新赋值,这就大大增加了代码的不安全性,所以,一般提供set,get两个成员方法,
 来获取和修改父变量的某些属性。
  public void setName(String name){ // 设置某些属性,需要传入参数     this.name = name; //因为是修改属性值,不清楚返回值类型,所以不用写ruturn;   }   public String getName(){ //获取某些属性的属性值     return name;//把需要获取的属性值ruturn出来,就可以那来使用了。   } }

 

3.super关键字:
super表示当前对象对父类对象的一个引用,另外,super可以调用当前父类对象的构造函数。
注意: 子类调用父类的构造方法时,super语句必须是子类构造方法的第一句!!

public class Fu{ //父类
  protected String name;
  protected int age;
  public Fu( String name,int age){ //这是父类 的一个构造方法,需要向里边传值
    this.name = name;
    this.age = age; //完成初始化
  }
}
public class Zi extends Fu{ //子类 通过extends关键字,实现对父类的继承
  public Zi(){ //这是子类的构造方法,也称为子类的构造器
    super(String name,int age)//先把父类的构造方法引进来,若父类的构造方法没有传值,括号内的内容可以省略,super()可以不写,默认加上的;
                        }
  //
若父类和子类的属性值有重名现象(如name),则可以用super.name来表示父类的属性。
 System.out.println(this.name+","+super.name)
}

 


4. final关键字

根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
4-1、final类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
4-2、final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
4-3、final变量(常量)
用final修饰的成员变量表示常量,值一旦给定就无法改变!
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
从下面的例子中可以看出,一旦给final变量初值后,值就不能再改变了。
另外,final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。

 

 

以上是关于java面向对象之关键字,权限修饰符的主要内容,如果未能解决你的问题,请参考以下文章

一脚踩进java之基础篇21——面向对象 (访问修饰符代码块)

Java面向对象之继承

Java内构造函数关键字权限修饰符访问控制及面向对象的特性!

面向对象特性之封装

第2章 面向对象特性之封装

java第五章:面向对象(oop)之三大特性