首页 \ 问答 \ Java面向对象?

Java面向对象?

我们现在学到就Java面向对象感觉比较困难特别是继承和多态有那位朋友能够提供一下关于这方面的资料,可以是带有注释的代码,不过我们现在还没有学接口。
更新时间:2021-05-28 22:05

最满意答案

面相对象的三大特性:
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();
}

其他回答

继承就相当于把别人的东西拿过来自己用,但在继承的过程中有些重点,权限的设计让你没权利继承有些东西。你继承后在使用时可以根据自己的要求进行对继承过来的方法进行重写。还有继承是单继承的。还有在运用的过程中有些要调用父类的构造方法等。这你看看书就行了。据现实来理解会容易点。接口就是声明是接口后在那里定义一堆通用的方法,但不用写方法体就可以了。你到时用他的时候就直接利用他们方法名进行一一实现就行了。接口是可以多实现的。http://www.jdon.com/index.html不错的一个平台。
对象是类的实例的意思 
面向对象 

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

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

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

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

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

从程序设计的角度来看,面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列
继承就是extends一个类,这个类就是他的父类,父类的非private都可以在这个类的实例中使用,就是你继承下来了这个类的方法和属性,当然他也可以有自己的方法和属性,当你自己定义的方法和父类方法同名而且参数都一样时就是你重写了父类的这个方法,实例调用这个方法时调用的是自己的方法而不是父类的,
多态应该包括继承重写和重载,重载就是一个class中有同名的方法,当时参数不同(个数或类型)
继承就是子类继承父类的属性以及方法,多态有两种,分为静态多态和动态多态,方法的覆盖可称为静态多态,而动态多态则首先要有继承关系,不同类的方法有不同的实现,一时也说得不是很清楚,我有相关资料,你要的话我用QQ4469523传给你。
我这有我自己总结的一个C#项目,附有帮助文档,就是讲的面向对象的变成思路,如果需要可以送你
类是创建对象的模板,对象是类的一个具体的实例,这就是类和对象之间的关系。
必须先有类,才能有对象!定义好一个类以后,你就可以创建该类的对象了。
类定义了属性和方法,属性也就是成员变量,可用于存储对象的状态,方法可用于建立对象的行为模型,举个例子:
我们说猫,猫是什么?猫一个类,那么什么是对象?这只猫是一个对象,具体的特指某一只猫是对象,猫有猫毛,毛有颜色,那么这只猫就是黑猫,那只猫就是白猫,这个毛和颜色都属于猫的属性,所以说属性可用于存储对象的状态,也就是说属性表现出了对象的状态,不同的对象通过属性值的不同就区分开了。
方法,抓老鼠,黑猫白猫它们都会抓老鼠,通过方法是区分不开他们的,所以方法只是对象的行为,某个类的这些个对象具有相同的行为,但是由于他们的属性可以不同,所以可以通过属性影响了方法的效果:
我和你都属于人类,我们是人这个类的两个对象,我们都有鼻子眼睛嘴这些属性,但是属性值不同,我嘴大,你嘴小,所以我比你吃的快,吃这种行为,就是我们共同具有的方法,但是我比你吃的快,由于属性值不同影响了方法内部的运算,我和你都调用这个方法,返回值可能不同。

面向对象思想其实不难,很接近我们现实生活的,相当于把我们现实世界的认知,通过一个很小的转变就转变到了编程语言上,所以面向对象更接近我们人的思维,楼主仔细想一下我上面举的例子,是不是现实中都存在?所以你也别感觉自己偏离了方向,你就运用人自然的的思维方式去考虑就可以了,但是因为可能我们会不习惯,这种现象Thinking in Java 中说的很好:“我们可能会被这种简单性难倒”,一点不错,可能我们太习惯过去那种面向过程的编程思想了,所以说时间长了,慢慢就好了,你要习惯一段时间,我估计楼主也是刚学,所以先别强求自己短时间内能精通所有细节,实在不行就多写代码吧,照猫画虎也好,开始都是模仿的,写的多了突然就会醒悟了,哦~原来是这么回事,所以楼主不妨以后写程序的时候这样想:

面向对象的思想,那么你看到的就是一个一个的对象了,所以解决一个问题的时候:
1)首先要考虑,作为这个问题来说,应该具有哪些个类,哪些个对象(上面已经说过了对象和类之间的关系)。
2)然后再考虑,这些个类和这些对象,应该具有哪些属性和方法。
3)再考虑,类与类之间具备了什么样的关系。 

你这样想多了,不知不觉就是面向对象的思维了。

面向对象的3个特性:封装,继承,多态。所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性。所谓继承,就是代码重用,而多态,从另外一个角度分割了接口和实现。

相关问答

更多
  • 面向对象的程序设计方法的出现和广泛应用是计算机软件技术发展中的一个重大变革和 飞越。它能够更好地适应当今软件开发在规模、复杂性、可靠性和质量、效率上的种种需求, 因而被越来越多地推广和使用,其方法本身也在这诸多实践的检验和磨练中日趋成熟、标准化 和体系化,逐渐成为目前公认的主流程序设计方法。本章将针对面向对象程序设计的一些基本 概念和基本方法做一简单介绍,使读者对它的体系、原则、基本思想和特点有一定的了解。 从 20 世纪 60 年代末开始,随着计算机软件系统规模的扩大和复杂性的增加,导致软件 的开销也惊人 ...
  • 面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的面向过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。 所有面向对象编程语言都支持三个概念:封装、多态性和继承,Java也不例外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象 ...
  • Java面向对象概述 (如今的程序领域,大家都在说,面向对象OOP,但是真正能理解面向对象的含义的程序员却很少,究竟什么是对象,怎样面向对象) 一.面向对象: 1.何谓对象:在面向对象程序设计中,我们将问题空间中的元素以及他们在方案空间中的的表示物称作对象(object) Alan Kay总结了smalltalk中对象的5大基本特征: 所有的东西都是对象。 程序是一大堆对象的集合,他们通过消息传递,各个对象之间知道要做些什么。 每个对象都分配有自己的存储空间,可容纳其他对象。 每个对象都有一个类型。 同一类 ...
  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。 而面向对象的设计则是从另外的思路来解 ...
  • Java面向对象?[2021-05-28]

    面相对象的三大特性: 1、封装:该隐藏的隐藏,该公开的公开。一般来说对象的属性应该隐藏,方法应该公开 的,还应有访问属性的方法。好处在于可以对属性的访问进行很好的控制。”private”私有的、别人不可用的, 对应的是公共的“public”。如果方法也要隐藏,就只能隐藏方法的实现,不能隐藏方法的声明,方法实现隐藏的好处在于:不会很大程度上影响到方法的架构。Eg: //测试封装 public class TestEncapsulation{ public static void main(String[] a ...
  • 对象是抽象的具体的意思,你可以把对象理解为具有一定特点的某类事物中的一个代表性事物,在形象点你可以理解成每个对象都是一个有独立思考能力和办事能力的人,面向对象就是说在设计java程序的时候,考虑问题要把对象的办事能力考虑进去,不要所有事情都自己一个人独揽,就像老板给员工分配任务或者求职者向中介寻求帮助一样,请求方与被请求放都有自己能做的事情,如果有别人能做那就交给那个人来完成就好了。 实例化对象你可以理解为就是找一个你想要的人,实际上就是为你想要的那个类的对象在内存里分配一个空间,让那个类在那个空间里生成一 ...
  • Struggle说得对。根本不是一个层次的东西。“面向对象思想”和“面向过程思想”相对,而“针对接口(抽象)编程”和“针对实现编程相对”。首先纠正楼主一个认识误区,任何编程思想都是在试图建立现实世界和计算机世界的“映射”。无论是面向过程还是面向对象或者是其它的什么思想,根本目的都是在计算机中建立现实世界的模型,通过模型的“沙盘推演”,达到解决现实问题的目的。宏观上说,无论是面向对象还是面向过程,都是一种世界观,是一种对世界的认知和划分。只不过面向过程的思想把世界划分为数据结构和函数,而面向对象的思想把世界划 ...
  • 对象是类的实例的意思 面向对象 面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计。 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统 ...
  • 面向对象方法是一种基于对象模型的程序设计方法,包括面向对象分析、面向对象设计、面向对象编程,是目前应用范围最广的设计方法。其中对象模型包括六个要素:封装、抽象、模块化、层次结构、类型、并发发、持久。与传统的结构化设计方法不同的是面向对象强调一组自动化的代理(对象),而不是强调过程的顺序。当今有三种主要设计方法:1.面向对象设计 2.结构化设计 3.数据驱动设计。每种方法都是针对某类问题,没有一种方法是万能的。现在面向对象设计方法在世界各地都已广范使用,但现在我们有许多人连面向对象基本概念都搞不清楚,却能用J ...
  • JS 面向对象[2022-01-02]

    为了能够清楚的解释这一切,我先从对象讲起。从其他面向对象语言(如Java)而来的人可能认为在JS里的对象也是由类来实例化出来的,并且是由属性和方法组成的。 实际上在JS里并不是如你所想(我开始是这么想的)那样,对象或直接称为object,实际上只是一些映射对的集合,像Map,字典等概念。JS里有大概7种类型(加上Symbol),数字、字符串、null、undefined、布尔、Symbol、对象。除对象以外的其他类型属于原始类型,就是说它们比较单纯,包含的东西比较少,基本上就是字面量所表示的那些(像C语言中 ...

相关文章

更多

最新问答

更多
  • Pandas Dataframe:根据多个条件创建列(Pandas Dataframe: Creating column based on multiple conditions)
  • 电工特种作业操作证汕头市澄海区那里有培训
  • 我的JDBCTemplate代码对select操作有什么问题?(What is wrong with my JDBCTemplate code for select operation?)
  • iphone sdk 4.1内存泄漏:可能是场景替换问题(cocos2d)(iphone sdk 4.1 memory leackage: may be scene replace problem (cocos2d))
  • 现在学习什么技术最有前途那
  • 将json响应转换为ArrayList 时,为什么gson库将整数值设置为零?(Why is gson library setting integer values to zero when converting json response to ArrayList?)
  • 请问:红木家具计算机雕花技术广东哪里有得学呢?急!!谢谢
  • Web组件与小组件:有区别吗?(Web Components vs. Widgets: Is there a difference?)
  • 为什么要使用多个catch块?(Why to use multiple catch blocks?)
  • VB脚本日期格式为“YYYYMMDDHHMMSS”(VB Script date formats “YYYYMMDDHHMMSS”)
  • 有一个缩写为AZ的解压压缩包的软件,是什么软件
  • 如何从液体标签访问Rails控制器?(How to access the Rails controller from a liquid tag?)
  • 如何仅在git中复制和替换分支中的一些项目文件(how to copy and replace some project files in a branch only in git)
  • 检查一个值是否等于Django模板中另一个数字的模数(Check if a value is equal to the modulo of another number in a Django template)
  • 如何使shell脚本自动化并读取当前时间?(How do I make a shell scripted automated and read current time?)
  • Recyclerview页眉和页脚的IndexOutOfBoundsException(IndexOutOfBoundsException for Recyclerview header and footer)
  • Rails 3中的模板路径(Template path in Rails 3)
  • Python内联if语句(Python inline if statement)
  • 使用Django ORM,如何执行此INNER JOIN类型的查询?(Using Django ORM, how to perform this INNER JOIN type of query?)
  • group_by与其中的R(group_by with which in R)
  • 如何避免重复的代码目标-c(How to avoid duplicate code objective-c)
  • Laravel - 包括外部项目(Laravel – Include external Project)
  • 如何在Rails中打印出一个对象的内容,便于调试?(How do I print out the contents of an object in Rails for easy debugging?)
  • Google表格API:golang BatchUpdateValuesRequest(Google Sheets API: golang BatchUpdateValuesRequest)
  • 是否允许在c中允许其他结构内的结构定义?(Is structure definition inside another structure allowed in c? [duplicate])
  • 使用onClick从适配器更改ListView项目布局(Changing ListView item layout from adapter with onClick)
  • mysql左连接只从左表中选择最高(mysql left join selecting only highest from left table)
  • ImportError:proj / proj / celery.py中没有名为'celery'的模块(ImportError: No module named 'celery' in proj/proj/celery.py)
  • 学Java好吗?
  • 在Mac上运行ruby实用程序时出现GEM LOAD错误(Getting GEM LOAD error when I run a ruby utility on Mac)