黑马程序员_java修饰符学习总结

                      ---------android培训、java培训期待与您交流! ---------



几个概念:


类:对象的集合体,对象模板。举例说明:现实中的汽车是一个类,它具有车的共同属性和行为:如动力驱动,有四个或四个以上轮子,加油等。小汽车、面包车、卡车等都是它的子类,它们都具有汽车(其父类)的属性和行为(注意:子类也是类,它可能还有子类),这就是继承。Java只支持单继承,即一个类只能有一个父类。对象是类的具体化:一个类可以有多个对象。一个类可以有多个子类,每个子类不尽相同。所谓:“一母生九子,九子各不同”。如小汽车可以是四轮驱动也可以是两轮驱动等;桑塔纳3000有红的、白的、黑的等多种颜色(这个就是类的多态性)。我们可以使用桑塔纳3000,但并不知道它是怎么造出来的,这种对用户隐藏实现细节就是封装。类的封装、继承和多态性是面向对象编程的三个核心特征。


包:是管理类的有效机制,实际上对应一系列文件夹,管理类和平常管理文件类似。


类名要求:1、不能使用关键字;2、第一个字符不能为数字;3、首字母应该大写,同包内不能重复;4、类名应该有意义。我先面的例子为了好理解,所以没有遵守第4条。


对于修饰符问题,是阻挡在Java初学者面前的一块顽石。不管是类的还是方法或变量的,我们总是记了忘忘了记。不掌握修饰符的用法,根本就没法进行下一步的学习,所以今天又总结了一些小东西,和大家共享,希望能给初学者帮助为盼。


在以后学习中我会不断总结Java的学习内容,用以帮助学习和自勉。下面的代码复制粘贴后就可以使用,在Eclipse中没有错误。


//注意:下面类A在a包中
package a;


/*类修饰符:
 * public:公共类。同包不同包的类都能访问;
 * default:默认类。只能被同一包的其他类访问,默认方式不加修饰符;
 * final:最终类。该类不能被继承,即该类不能有子类;
 * abstract:抽象类。该类不能被实例化。
 */
/*方法和变量权限修饰符,建立在其类能访问的基础上,这点很重要
 * public:公共,在哪都能访问
 * protected:包私有级,不同包子类可以访问
 * default:友好方法,什么都不加,包私有级,不同包子类不可以访问
 * private:类私有级,只有所属类能访问
 * final:最终方法,不能由子类改变
 * abstract:抽象方法,无方法体
 * static:类方法修饰符,类方法只能调用类方法;但它不是访问权限修饰符
 * 类方法以外的方法称实例方法:实例方法可以调用其他实例方法和类方法
 * 记忆方法:有static类方法的只能调用static或被别的方法调用
 */


public class A {


 // 常用变量的修饰符有:public protected private static final
 // 实例变量,有private只能在同一个类中使用
 // 如果一个对象改变了实例变量的值,不会影响其他变量的访问
 // 不同对象的实例变量将被分配不同的内存空间
 // 下面以一家人举例:
 public String surname;// 如姓:张为public可以被任何地方访问
 /*
  * protected变量同包能用,不同包不能访问,但不同包子类可以访问 举例:带家里的存折,家里人能用。儿子长大成家了,有条件可以用。
  */
 protected String depositbook;
 String id;
 /*
  * private变量同包能用,不同包不能访问,但不同包子类也不可以访问 举例:家里的存折,家里人能用。姑娘出嫁了,家里存折不让用。
  */
 private String colorType;
 private int size;
 float a, b;// 实例变量,对下面的方法都可见
 private static String depart;


 /*
  * 类变量,有static,其值为该类所有对象共享,不会因类的对象不同而不同 当类变量被加载到内存时,类变量就会分配相应的内存空间
  * 所有实例对象都共用一个类变量,内存中只有一处空间存放变量的值 如果一个对象改变了类变量的值,其他对象得到的就是改变后的值
  * 通过实例化变量,让其可以被访问
  */
 public static String getDepart() {
  return depart;
 }


 public float getA() {
  return a;
 }


 public static void setDepart(String depart) {
  A.depart = depart;
 }


 public void setA(float a) {
  this.a = a;
 }


 // 常量,最终成员变量,其值不变,即常量
 public final float PI = 3.14f;


 // 实例方法
 void sum(float x, float y) {
  setA(PI);
  a = max(x, y);
  b = min(x, y);
 }


 static float getMaxSqrt(float x, float y) {


  float a, b, c;// 局部变量,仅在此方法中可见
  // 如果max方法中没有static下面这句话会显示错误,因为类方法不能调用实例方法
  a = max(x, y);
  // 下面这句没错,类方法能调用类方法
  b = min(x, y);
  c = a * b;
  return c;
 }


 // 缺省或友好方法,注意static不是权限修饰符
 static float min(float x, float y) {
  return x <= y ? x : y;
 }


 // 私有方法
 private static float max(float x, float y) {
  return x <= y ? y : x;
 }


 // 公共方法
 public void testPublic() {
  System.out.println("This is a Publictest!");
 }


 // 受保护方法
 protected void testProtected() {
  System.out.println("This is a Protectedtest!");
 }


 // 最终方法,不能被子类改变
 protected final boolean isLeapyer(int year) {
  if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
   return true;
  }
  return false;
 }
}






//注意:下面类B在b包中
package b;
import a.A;
public class B {
 protected B(){
  A test = new A();
       //import a.A后可以直接调用a.A的public变量和方法
  test.testPublic(); 
  test.getA();
  test.setDepart("三毛");
 } 
}




//注意:下面类C在B包中
package b;
import a.A;
class C extends A{
 void testC(){
//  C为A的子类可以调用父类A的public和protected变量和方法
  testPublic();
  testProtected();
  isLeapyer(2000);
 }
}

   ---------android培训、java培训期待与您交流! ---------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值