首页 > 其他 > 详细

类和对象

时间:2014-04-14 04:37:47      阅读:486      评论:0      收藏:0      [点我收藏+]

在设计面向对象的系统时,没有所谓的“顶部”,首先从设计类开始,在往每个类中添加方法。

识别类的简单规则是在分析问题的过程中寻找名词,而方法对应动词。

类之间的关系

依赖:如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。

聚合:类A的对象包含类B的对象。

继承:一个类继承于另一个类。

 

类和对象

 在面向对象的概念当中,类(class)是既包括数据又包括作用于数据的一组操作的封装体。类的数据称为成员变量,类对数据的操作称为成员方法。成员变量反映类的状态和特征,成员方法反映类的行为和能力。类的成员变量和方法统称为类的成员。

 对象(Object)是类的实例(instance)。对象是动态的,拥有生命周期,都会经历一个从创建、运行到消亡的过程。对象与类的关系就像变量与数据类型一样。

 

类声明

修饰符 } class <Classname> { extends <Classname> }

                            { implements  <Interface1>,<Interface2>,[..],<InterfaceN> }

{

  // 类主体

}

 

声明成员变量

public class Person{

    private int age;
}

 

(声明)成员方法

[修饰符返回值类型 方法名([参数列表])[throws 异常类]

{

    语句序列;

    [return []]

}

 

public class class Person{

    private int age;

    public int getAge(){

         return age;

    }

   

    public void setAge(int a){

         age=a;

    }

}

 

声明main方法

public static void main(String [] args)

 

对象声明

Date aday;//声明一个是Date类的aday对象变量,如果不进行实例化,是不可以调用Date类里的方法的,如:aday.toString();//是错误的。

对象实例化

创建类的实例必须调用类的构造方法。类的构造方法是一类和类同名的方法,用于创建类的实例并初始化对象。

对象 = new 类的构造方法([参数列表]);

aday = new Date();

当使用new创建了一个对象的时候,系统为对象中的成员变量进行了初始化,不但为变量分配了相应的存储单元,还为变量设置了所属数据类型的初始值。

这时就可以调用Date类里的方法了。 

 

方法调用时的参数传递原则

方法参数:1、基本数据类型  public int  sum ( int i);。

     2、对象引用 public Object getObj (Object   obj);

如果形参的数据类型是基本数据类型,则实际参数向形参传递的是值,即传值。

如果形参的数据类型是引用数据类型,则实际参数向形式参数传递的是引用。

用个例子来说明

public class Tester {    

    public static void main(String[] args) {    

        int primitive = 2;    

        changePrimitive(primitive);    

        //primitive的值依然是2    

        MyClass myClass = new MyClass();    

        changeObject(myClass);    

        //myClass仍然指向的是执行changeObject之前的那个对象 

        //myClass.i等于3了    

    }    

  

    public static void changePrimitive(int primitive) {    

        primitive = 3;    

    }    

  

    //在这里myClass1只是一个副本和myClass指向的是同一个对象,千万不要被去参数名称为myClass迷惑

    //这里我有意区分

    public static void changeObject(MyClass myClass1) {

        //这个时候对原来的对象的值操作有效,因为它指向的地址就是原来的对象

        myClass1.i = 3;

        //这里修改的只是副本指向的对象

        //而原来的myClass依然指向原来的对象

        myClass1 = new MyClass();    

    }    

}    

  

class MyClass {    

    int i;    

}   

2,封装,继承,多态

 

(1)封装性

 封装就是将属性私有化,提供公有的方法访问私有属性。

 做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(setter)方法,用于对这些属性的访问。

 如:private String name;

 public String getName(){

                     return;

            }

         public void setName(String name){

                     this.name=name;

            }

  

继承

  Java中只支持单继承,子类不能够继承父类的构造方法。但在子类当中可以使用super调用父类的构造方法。格式为super([参数列表])

 子类可以对父类赋值兼容。

 由于继承相对而言比较简单,所以不再赘述。 

 

多态性

多态性有两种

a,编译时多态。

 b,运行时多态。

 方法的多态性主要有方法的重载和覆盖。

一个类中如果有多个同名的但是带有不同参数的方法列表,称为方法的重载。

方法名称相同,参数项不相同。那么认为一个方法是另一个方法的重载方法。

注意:重载只跟参数有关,与返回类型无关。方法名和参数相同而返回类型不相同,不能说是重载。

典型的方法重载:System.out.println();  Sysstem.out代表了一个java.io.PrintSteam对象,具有多个println(打印)方法,该方法可以接收不同类型的数据作为参数根据类型不同,

调用不同的打印方法。

在java.lang包中的Math类中的max方法。

Public static int max(int a,intb);

Public static int max(long a,long b);

Public static int max(float a,float b);

Public static int max(double a,double b);

 方法的覆盖表现出两种多态性,当对象获得本类的实例时,为编译时多态性,否则为运行时多态性。

 Person p=new Person();

 Student stu=new Student();//假设StudentPerson的子类,它们有同样的print()方法。

 Person p1=new Student();

 p.print();//编译时多态,执行本类方法

 stu.print();//编译时多态,执行覆盖方法

 p1.print();//运行时多态,执行Student覆盖方法

p1声明为父类对象但是却获得了子类的实例,那么它究竟执行的是子类覆盖方法还是父类方法呢?

这里有两种情况,这取决于子类是否覆盖了父类的该方法。如果子类覆盖了该方法,就执行子类的该方法,否则执行父类方法。但是在编译时,仅仅依据对象所属的类无法确定到底该执行哪个类的方法,只有到运行是才能呢个确定,所以是运行时多态。

这里请注意,父类对象并不能没有被子类覆盖的方法

类和对象,布布扣,bubuko.com

类和对象

原文:http://www.cnblogs.com/love-javabean/p/3662710.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!