精华内容
下载资源
问答
  • 关于JAVA封装

    2010-06-25 01:25:00
    在理解封装之前,我们先看一段代码。 Code: //Student类,具有一个属性,年龄   public   class  Student {   public   int  age;     public   void  SayHi...

    在理解封装之前,我们先看一段代码。

    Code:
    1. //Student类,具有一个属性,年龄   
    2. public class Student   
    3. {   
    4.         public int age;   
    5.   
    6.         public void SayHi()   
    7.        {   
    8.             System.out.println("我今年" + age + "岁");   
    9.        }   
    10. }  

     

    然后我们在main方法内实例化一个Student类对象,并对其属性age赋值。然后再调用SayHi()方法。

    Code:
    1. public class Program   
    2. {   
    3.     public static void main(String args [])   
    4.    {   
    5.         Student stu = new Student();   
    6.        
    7.          //对stu的属性age赋值1000  显然不符合逻辑   
    8.          stu.age = 1000;                 
    9.          //调用stu的SayHi()方法   
    10.          stu.SayHi();   
    11.    }   
    12. }  

     

    以上代码看到了,我们对age属性赋的值是1000,显然不符合逻辑。那么我们怎么样对程序中的某

    一字段进行约束呢。

    这就用到了封装。

    首先,我们先了解一下什么叫封装?

    封装就是将属性私有化,提供公有的方法访问私有属性。做法就是:修改属性的可见性(访问修饰

    符)来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值方法(setter)方法,

    用于对这些属性的访问。

    看以下封装代码:

    Code:
    1. public class Student   
    2. {   
    3.      private int age;   //将属性私有化   
    4.         
    5.      //提供一个方法,用于对属性赋值   
    6.      public void setAge(int age)   
    7.     {   
    8.             if(age > 0 && age < 100)                  //对传递的值,进行判断   
    9.             {   
    10.                   this.age = age;                          //若符合逻辑   
    11.             }   
    12.             else                                                //若不符合逻辑   
    13.             {   
    14.                   System.out.println("输入错误!");   
    15.                   this.age = 20;   
    16.             }   
    17.     }   
    18.   
    19.     //提供一个方法,用于读取属性的值   
    20.       public int getAge()   
    21.       {   
    22.             return age;   
    23.       }   
    24.   
    25.        public void SayHi()   
    26.        {   
    27.                 System.out.println("我今年" + age + "岁");   
    28.        }   
    29.   
    30.   
    31. }  

     

    以上代码注释已经写的很清楚了。就是提供一组方法,其中包括两个方法,一个用于读取值的,一

    个用于赋值的,在赋值的方法中,对传递进来的值进行判断,若符合条件,则赋值,若不符合。则

    报错。

    然后我们在main方法中,实例化一个Student类的对象,并对属性赋值。然后调用SayHi()方法。

    就可以看到我们想要的结果了··

    自己试试吧··

     

    展开全文
  • 乱七八糟的想法#封装、继承、多态是面向对象语言的重要特征。封装最重要的就是对外部隐藏一些不必要和不许修改的成员,而公开一些对外部有用的成员。Java中使用private来实现隐藏。继承是父类经过扩展生成一个子类,...

    乱七八糟的想法#

    封装、继承、多态是面向对象语言的重要特征。

    封装最重要的就是对外部隐藏一些不必要和不许修改的成员,而公开一些对外部有用的成员。Java中使用private来实现隐藏。

    继承是父类经过扩展生成一个子类,子类可能比父类具有更多的属性,java教材上说,子类将获得父类的全部成员变量和方法,而不能获得父类的构造器,那么:

    父类方法具有private访问权限,则方法对其子类是隐藏的,子类无法访问该方法。这时有一个问题,一个public权限的父类方法中调用了private权限的方法,而这个public权限的方法被子类继承,如果这时子类调用这个方法,那private权限的方法不是被执行了吗?

    父类一个成员变量具有private访问权限, 那么这个变量对于子类也是隐藏的,子类无法访问这个变量。但是,在创建子类对象时,系统会为这个成员变量创建存储空间吗?

    小实验:

    class Superclass

    {

    private int a = 0;

    public int b = 1;

    protected int c = 2;

    int d = 3;

    public Superclass()

    {

    System.out.println("Superclass Constructor!!");

    System.out.println(a+" "+b+" "+c+" "+d);

    call();

    }

    private void test()//一个private方法

    {

    System.out.println("Private test!");

    }

    public void call()

    {

    System.out.println("Superclass Call!!");

    this.test();

    }

    }

    class Subclass extends Superclass

    {

    public int a = 3;

    private int b = 2;

    int c = 1;

    protected int d = 3;

    public Subclass()

    {

    System.out.println("Subclass Constructor!!");

    }

    public void call()

    {

    System.out.println("Subclass call");

    super.call();

    }

    public void test()

    {

    System.out.println("Override??");

    }

    public static void main(String[] args)

    {

    Subclass test = new Subclass();

    test.call();

    }

    }

    运行结果:

    Superclass Constructor!!

    0 1 2 3

    Subclass call

    Superclass Call!!

    Private test!

    Subclass Constructor!!

    Subclass call

    Superclass Call!!

    Private test!

    这个java程序中,在父类Superclass中定义了一个私有方法test(),子类中定义了一个公共方法test(),可以看到,这时子类并没有Override这个方法,所以在super()调用父类构造器时,执行的是父类中的私有方法,同样,在call()方法中调用test()时,执行的同样是父类中的私有方法。但这时,并不能说子类获得了这个方法,因为子类根本没有权限访问修改它。

    这时,如果将private方法改变为public权限,这时运行结果变为:

    0 1 2 3

    Subclass call

    Superclass Call!!

    Override??

    Subclass Constructor!!

    3 2 1 3

    Subclass call

    Superclass Call!!

    Override??

    此时,父类的test()方法被子类Override,这时,在执行super()和super.call()时,调用的是子类的test()方法。

    同时,父类的所有成员变量在子类对象被创建时,均被分配了存储空间,包括private权限的的变量,只是,这个变量不能被子类访问,只能在父类方法中被访问,因此,子类也并没有获得这个变量。

    需要注意的问题#

    关于继承

    方法Override时,子类方法的返回值类型应比父类方法返回值类型更小或相等,抛出异常应比父类方法声明抛出的异常类更小或相等,访问权限应比父类的大或相等,方法名和形参列表必须相同,覆盖方法和被覆盖方法应同为类方法或者实例方法。

    子类不会获得父类的构造器,但子类构造器会调用父类的构造器,不论是否显式的调用super(),这样一层层深入,每个对象在创建时,都会调用Object类的构造器。

    3.父类中的方法被子类Override时,在父类中调用该方法时,会执行子类中的覆盖方法,如上面的例子就是这种情况。

    展开全文
  • 利用泛型定义一个返回对象public class ServiceResult {private String msg="";//消息说明private int resultCode=0;//结果消息代码private T data;//返回的数据字段public String getMsg() {return msg;...

    利用泛型定义一个返回对象

    public class ServiceResult {

    private String msg="";//消息说明

    private int resultCode=0;//结果消息代码

    private T data;//返回的数据字段

    public String getMsg() {

    return msg;

    }

    public void setMsg(String msg) {

    this.msg = msg;

    }

    public int getResultCode() {

    return resultCode;

    }

    public void setResultCode(int resultCode) {

    this.resultCode = resultCode;

    }

    public T getData() {

    return data;

    }

    public void setData(T data) {

    this.data = data;

    }

    }

    /**

    *

    * 一个service对象

    */

    public class MyServices {

    public List getUserList(){

    return new ArrayList();

    }

    public User getUserByID(Long userId){

    return new User();

    }

    }

    /**

    * user

    */

    class User{

    private String name;

    private Long id;

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public Long getId() {

    return id;

    }

    public void setId(Long id) {

    this.id = id;

    }

    }

    /**

    * request调用

    */

    public class UserRequestObject {

    public void doReuest(String requestType){

    MyServices someMyServices=new MyServices();

    if(requestType.equals("userList")){

    ServiceResult> result=new ServiceResult>();

    result.setData(someMyServices.getUserList());

    }else if (requestType.equals("user")){

    ServiceResult result=new ServiceResult();

    result.setData(someMyServices.getUserByID(0L));

    }else{

    ServiceResult result=new ServiceResult();

    result.setData(null);

    }

    //数据转成JSON格式,返回给调用者

    }

    }

    展开全文
  • 以下关于java封装的描述中,正确的是: 正确答案:A 你的答案:A(正确) 封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性 封装的意义不大,因此在编码中尽量不要使用 如果子类继承父类,对于...
    以下关于java封装的描述中,正确的是:

    正确答案:A  你的答案:A(正确)

    封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性
    封装的意义不大,因此在编码中尽量不要使用
    如果子类继承父类,对于父类中进行封装的方法,子类仍然可以直接调用
    只能对一个类中的方法进行封装,不能对属性进行封装
    展开全文
  • Bundling(bundle) code into individual software objects provides a number of benefits, including: (封装性的好处) Modularity(module)模块化: The source code for an object can be written and maintained ...
  • 利用泛型定义一个返回对象public class ServiceResult {private String msg="";//消息说明private int resultCode=0;//结果消息代码private T data;//返回的数据字段public String getMsg() {return msg;...
  • 关于封装、继承、多态的概念网上有很多的描述,这里就不在重复了。本文仅以自己个人的理解,举个列子来说明他们的作用。 (偏入门,大佬轻喷) 准备工作 举个例子,水果父类Friuts,水果子类Apple、Banana… /* 水果...
  • 定义狗类publicclassDog{privateStringtype;privateintage;privateStringmood;privateStringname;publicDog(){}publicDog(Stringtype,intage,Stringmood,Stringname){this.type=type;...定义狗类public class Dog {...
  • 面向对象语言的三大特征:封装,继承和多态 封装 封装的概念:将类的某些信息隐藏到内部类,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。 public class Demo{ private String ...
  • 说到Java的三大特性:继承,封装,多态,大家一定有属于自己的理解,而作为一个喜欢吃咖喱饭的吃货来说,把这三个特性诠释得完美无缺的东西就是——咖喱块。 为什么说咖喱块完美符合Java三大特性呢?我们先说第一个...
  • 好久没有写……这部分内容应该是好久之前都学习过的,这会儿才记下来,感觉自己好懒……恩,对于封装,从字面上理解就是“封”和“装”两部分。我先来谈谈我理解的“装”吧……所谓“装”就是 把一些什么东西装到一...
  • 1.封装性  封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:  ◇ 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。  ◇信息...
  • Pet类里面有health健康值(int)属性,是封装起来的get和set方法; Dog类继承了Pet类,在eat()方法里,需要达到健康值+3怎么写? 我知道如果没有封装的话是super.health = super.hralth + 3; 可是封装后该怎么写...
  • //Triangle类,用于封装Triangle的属性及功能。package qing;public class Triangle {double sideA,sideB,sideC,area,length;boolean boo;Triangle (){this.sideA = 3;this.sideB = 4;this.sideC = 5;}public ...
  • 这个问题反编译一下字节码就知道了:javap -verbose Test.java,可以看看main的方法体public static void main(java.lang.String[]);Code:Stack=3, Locals=6, Args_size=10: ldc #2; //String key2: astore_13: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,164
精华内容 1,265
关键字:

关于java封装

java 订阅