当前位置:编程学习 > JAVA >>

Java面向对象?

我们现在学到就Java面向对象感觉比较困难特别是继承和多态有那位朋友能够提供一下关于这方面的资料,可以是带有注释的代码,不过我们现在还没有学接口。
答案:
面相对象的三大特性:
1、封装:该隐藏的隐藏,该公开的公开。一般来说对象的属性应该隐藏,方法应该公开 的,还应有访问属性的方法。好处在于可以对属性的访问进行很好的控制。”private”私有的、别人不可用的, 对应的是公共的“public”。如果方法也要隐藏,就只能隐藏方法的实现,不能隐藏方法的声明,方法实现隐藏的好处在于:不会很大程度上影响到方法的架构。Eg:
//测试封装
public class TestEncapsulation{
public static void main(String[] args){
CreditCard card=new CreditCard();//创建一个新的对象,并赋予给引用中
System.out.println(card.getPassword());//调用引用的一个方法并打印出来
card.setPassword("654321");//调用引用的一个方法
}
}
class CreditCard{
private String password="123456";//定义一个私有?封装)的属性
public String getPasswor(){//调用封装(私有)的属性的方法
return password;
}
public void setPassword(String password){//修改封装(私有)的变量
if (password.,ength()!=6) return;
this.password=password;
}
}
2、继承:子类继承父类,共性(一般性)放在父类,个性(特殊性)放在子类,从一般(父类)到特殊(子类)的关系。java中子类和父类之间一般是单继承的,即一个子类只能有一个直接的父类。但是一个父类可以有多个子类。体现了java的简单性和扩展性的特征。在此用到一个关键字“extends”继承,用来连接子类和父类的语言。父类的属性(私有的出外)和方法(私有的出外)会自动的继承到子类中,构造方法是不能继承的,只能访问,用关键“super”访问。
方法覆盖(override): 就是在子类中再写一个与父类相同的方法声明(要求:方法名、返回值、参数表必须相同、子类方法权限<标识符>相同或者宽余父类的方法权限),但是它们的方法实现不同,用子类的特殊方法实现继承父类给他的一般方法实现。

3、多态:指在一棵继承树中的类中可以有多个同名但不同方法体以及不同形参的方法。
多态有两种情况:覆盖和重载。
编译时多态:即是方法覆盖。
运行时多态:子类对象可以当作父类对象来看代(例:猫可以看作是动物;宝马可以看作是车,等等),“Animal a = new dog();”意思是创建一个新的dog对象,并赋予给Animal中的引用,其中的“Animal a”是引用类型(父类中的),“new dog()”是对象类型(子类的),类Animal必是类dog的父类。引用代表主观的概念(可以改变的概念),对象代表客观的概念(不可随人的主观思想改变而改变的)。
多态的三条原则:
1)对象类型不变 : 即客观事物不能改变(对象类型),主观的概念能够改变(引用类型);
2)只能对引用调用其引用类型中定义的方法;
3)在运行时,根据对象类型找子类覆盖之后的方法。Eg:
public class TestPolymorphism{
public static void main(String[] args){
Animal a=new Dog();//创建一个新的对象类型,并赋予到引用类型中
a.eat();
a.sleep();//打印出来的结果是"sleep 6 hours",因为子类覆盖了父类的相同方法
//下面的方法在父类没有,不能实现,如要实现则需要强制转换,例如下面的强制转换
//a.call(); error!
if (a instanceof Dog){//进行强制转换时须进行判断操作
Dog d=(Dog)a;//如果在,把引用类型中的对象强行转换到子类的对象中
d.call();//然后再进行子类特有的方法
}
/*System.out.println(a instanceof Dog); true
System.out.println(a instanceof Cat); false
System.out.println(a instanceof Animal); true*/
}
}
class Animal{
public void eat(){
System.out.println("Animal eat");
}
public void sleep(){
System.out.println("sleep 8 hours");
}
}
class Dog extends Animal{
public void sleep(){
System.out.println("sleep 6 hours");
}
public void call(){
System.out.println("dog call ");
}
}
当父类引用要强制转换到子类中时,需要先进行判断子类是否是在引用类型中,用到关键字“instanceof(是不是)”进行判断,eg:
if (a instanceof Dog){//判断子类是否在引用类型中
Dog d=(Dog)a;//如果在就进行下面的操作,把引用类型中的对象强行转换到子类的对象中
d.call();//调用子类的方法
}
“引用+instanceof(是不是)+类名”其返回值是boolean类型的即结果是true或者false,eg:a instanceof dog 表示a引用的对象里面是不是dog。
多态会使我们的程序更加简单化
多态一般用在方法的返回值中和方法的参数上面,eg:
public Animal eat(){
return new dog();
}
public void eat(Animal a){
return new dog();
}
package yinghang;

import java.util.Random;

public class Ka {
public int kahao;
public int qian;

//该函数表示往自己的卡里存100元,
public Ka(){
Random rand=new Random(System.currentTimeMillis());//系统当前时间
this.kahao=rand.nextInt(100);
this.qian=0;
}
//

public void cunqian(int qian){
this.qian+=qian;
System.out.println("现在帐户里有:"+this.qian);
}



public void quqian(int qian){
this.qian-=qian;
System.out.println("现在帐户里有:"+this.qian);
}


public void zhuanqian(int qian,Ka k){
this.qian-=qian;
k.qian+=qian;
System.out.println("现在自己的帐户里有:"+this.qian);
}
}
给你一些代码,你自己看能否看懂
对象是类的实例的意思 
面向对象

面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计。

它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。

它可以有不同层次的理解:

从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。

从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。

从程序设计的角度来看,面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列
继承就相当于把别人的东西拿过来自己用,但在继承的过程中有些重点,权限的设计让你没权利继承有些东西。你继承后在使用时可以根据自己的要求进行对继承过来的方法进行重写。还有继承是单继承的。还有在运用的过程中有些要调用父类的构造方法等。这你看看书就行了。据现实来理解会容易点。接口就是声明是接口后在那里定义一堆通用的方法,但不用写方法体就可以了。你到时用他的时候就直接利用他们方法名进行一一实现就行了。接口是可以多实现的。http://www.jdon.com/index.html不错的一个平台。
继承就是子类继承父类的属性以及方法,多态有两种,分为静态多态和动态多态,方法的覆盖可称为静态多态,而动态多态则首先要有继承关系,不同类的方法有不同的实现,一时也说得不是很清楚,我有相关资料,你要的话我用QQ4469523传给你。
我这有我自己总结的一个C#项目,附有帮助文档,就是讲的面向对象的变成思路,如果需要可以送你
继承就是extends一个类,这个类就是他的父类,父类的非private都可以在这个类的实例中使用,就是你继承下来了这个类的方法和属性,当然他也可以有自己的方法和属性,当你自己定义的方法和父类方法同名而且参数都一样时就是你重写了父类的这个方法,实例调用这个方法时调用的是自己的方法而不是父类的,
多态应该包括继承重写和重载,重载就是一个class中有同名的方法,当时参数不同(个数或类型)
类是创建对象的模板,对象是类的一个具体的实例,这就是类和对象之间的关系。
必须先有类,才能有对象!定义好一个类以后,你就可以创建该类的对象了。
类定义了属性和方法,属性也就是成员变量,可用于存储对象的状态,方法可用于建立对象的行为模型,举个例子:
我们说猫,猫是什么?猫一个类,那么什么是对象?这只猫是一个对象,具体的特指某一只猫是对象,猫有猫毛,毛有颜色,那么这只猫就是黑猫,那只猫就是白猫,这个毛和颜色都属于猫的属性,所以说属性可用于存储对象的状态,也就是说属性表现出了对象的状态,不同的对象通过属性值的不同就区分开了。
方法,抓老鼠,黑猫白猫它们都会抓老鼠,通过方法是区分

上一个:java io流
下一个:抽象函数 java

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,