您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 面向对象和面向对象的高级概念
面向对象主要内容:1.方法的定义2.类的定义3.对象的实例化4.构造方法5.值传递6.访问控制修饰符7.面向对象的特性a)封装b)继承c)多态8.关键字9.抽象类10.接口11.作业一、方法的定义(函数)a)方法的基本格式[修饰符]返回值类型方法名([参数1],[参数2]...){}注:1.[]中的可以省略2.返回值类型:void无返回值类型,还有基本数据类,引用数据类型3.参数可以有多个,通过传递赋值,没有实际的值,叫做形参4.()是方法的象征5.{}是方法体,必须写,不能省略b)无参数的无返回值的方法c)有参数的无返回值的方法d)无参数的有返回值的方法e)有参数有返回值的方法二、类的定义世界万物是有什么组成的,在java的世界中,一切皆是对象。那我们怎么来定义类呢?那我们身边有哪些对象呢?比如:人具有特征:身高,体重,姓名,性别等等具有行为:吃饭,穿衣,睡觉,运动,思考,等等比如:汽车具有特征:颜色,品牌,性能等等具有行为:行驶,倒车,鸣笛等等比如:灯泡具有特征:价格,大小等等具有行为:开,关,亮,暗等等类的属性:对象所具有的特征类的方法:对象所执行的操作类可以看成一类对象的模板对象可以看成是类的一个实例(实体)举例:自己定义人(People)的类a)成员变量(属性,字段(field),全局变量)1.在方法的外部,类的内部声明2.成员变量可以不赋初始值使用b)局部变量1.在方法的内部声明2.必须赋初始值之后才能使用注意:简单来说,在哪个括号中声明的,可以在哪个括号中使用练习:编写学生(Student)类,如下图(可以自由发挥,作为个人简历)三、对象的实例化a)格式:类型对象名=new类型();b)作用:在堆内存中创建一个类的对象c)注意:1.new是关键字2.自己声明的类也是一个类型3.对象名必须是标识符4.类型必须是引用数据类型,自己声明的所有的类都是引用数据类型四、访问成员变量和成员方法用对象名.访问成员变量或方法例如:Students=newStudent();s.name=“张三”;//修改学生的属性那么的值System.out.println(“姓名:”+s);//输出学生的姓名s.print();//调用学生类的print的方法,打印学生的所有信息Students1=newStudent();System.out.println(s1.name);注:1.s1中name的值是多少呢2.每一个对象中的成员变量都有自己的存储空间3.每一个对象都只能改变自己空间中的属性五、类与对象的关系类与对象的关系类:Student对象:s1(学生1)s2(学生2)类:类可以看成是一类对象的模板类是抽象的概念,只是模板类只是对具体实物的抽象对象:对象是类的一个具体实例对象是实体对象是实际存在我们可观世界的实体六、构造方法a)定义1.方法与类同名2.没有返回值(void是无返回值类型)3.可以用访问控制修饰符修饰b)作用1.用new+构造方法创建一个对象,并执行构造方法中的代码2.可以通过构造方法给成员变量赋初始值c)注意1.可以理解为构造方法是由返回值得,调用构造方法返回一个当前类的对象2.也可以叫构造函数3.new+带参数的构造方法也可以创建一个对象4.也可以直接写new+构造方法执行代码七、值传递a)基本数据类型传递的是值,不能改变原来方法中局部变量的值b)引用数据类型传递的是对象,可以改变对象中的值c)不能改变对象的引用八、访问控制修饰符关键字本类子类同包所有的类private√default√√protected√√√public√√√√注:1.private,protected不能修饰类2.都可以修饰构造方法,限制构造方法的使用3.default不能写出来九、面向对象的特性a)什么是面向对象面向对象是java的基本思想面向对象和面向过程都是编程语言的思想面向过程强调的是对象的行为面向对象是将功能封装起来,强调的是具有功能的对象面向对象的三大特性:封装,继承和多态b)面向对象和面向过程的区别面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。c)封装封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问封装的思想:1.隐藏类的实现细节2.迫使用户使用接口去访问3.使代码更好的维护如何封装1.修改属性的可见性,设为private2.创建getter和setter方法,便于读写属性3.在方法中加入对属性的控制封装的好处d)继承什么是继承是指自然人死亡后,由法律规定的人或遗嘱指定的人依法取得死者遗留的个人合法财产的法律隐藏类的实现细节只能通过规定方法访问数据方便加入控制语句方便修改实现制度。(这是法律中的继承)是java中一个类(子类)可以继承另外一个类(父类)中的所有的成员变量和方法继承的思想减少代码的冗(rong)余,增加代码的重用怎么继承所有的鸟,鱼,家禽都属于是动物,应该拥有动物所有的属性和方法,所以应该继承动物所有的特征和行为,金鱼带鱼都属于是鱼,所以应该继承鱼类所有的特征和行为。鱼继承动物FishextendsAnimal鸟继承动物BirdextendsAnimal麻雀继承鸟SparrowextendsBird带鱼继承鱼HairtailextendsFish动物(Animal)鸟(Bird)鱼(fish)家禽(poultry)麻雀Sparrow黄鹂Oriole金鱼Goldfish带鱼Hairtail鸡Chicken鸭Dock动物是鱼的父类(基类、超类)鸟是动物的子类(派生类)那带鱼能不能既继承鱼也继承动物呢?不能,因为java只支持单继承继承的好处继承是传递的,在一些比较一般的类的基础上构造、建立和扩充新类的最有效的方法简化了人对事物的认识和描述,清晰体现相关类之间的层次结构关系继承提供了软件的重用功能,减少代码和数据的冗余,大大增加了程序的重用性继承通过增强一致性,减少了模块之间的接口和界面,大大增加了程序的易维护性多重继承机制,一个类可以是多个类的父类,也可以从多个类中继承属性和方法,出于安全和可靠性的考虑,仅支持单重继承,通过接口机制来实现多重继承继承的例子上述例子表明:子类继承父类,子类可用使用父类中的成员,就像是子类自己的一样构造方法的特殊性构造方法不能被继承在调用子类构造方法的时候首先调用父类的构造再执行本类的构造方法重载重载的定义:同一个类中方法名相同参数不同返回值可以不一样重载的例子:重写重写的定义:子类中方法名相同参数相同返回值相同不能有比父类有更严格的访问权限不能抛出比父类更多的异常重写的例子e)多态什么是多态多态顾名思义就是多种形态的意思一类的事物存在多种形态,不同的对象收到同一个消息可以产生完全不同的效果。多态的前提继承重写向上转型多态的体现狗g=new狗();例如:动物dw=new狗();父类的引用指向子类的对象用户发送了一个通用的对象,实现的细节有接受对象自行决定对象的引用父类的引用指向子类对象,不能访问子类中特有的方法父类的引用只能访问父类的成员,但执行的是子类重写父类的成员多态的作用提高了程序的扩展性和后期的可维护性增强了软件的透明度,可理解性,可扩展性增强了灵活性和重用性多态是面向对象的重要思想,面向对象没有多态也就失去了色彩注意存在继承或者实现存在重写方法强制转换动物dw=new狗();可以将dw表示的对象转化为”狗”对象可以想象为是一个贴着动物标签的盒子中放一个狗对象不能任意转换类型,必须转换为对应的类型用关键字instanceof(实例类型判断运算符)判断是否是某个类型实验1动物园有这些动物:狗、兔子等,饲养员每天都会给这些动物喂食,狗喜欢吃骨头、而兔子喜欢吃胡萝卜,通过Java程序模拟饲养员喂食实验21.编写一个类Shape类,具有一个draw方法,派生出三个子类Circle(圆)Triangle(三角形),Rectangle(矩形),子类中重写了父类的方法。2.编写一个测试类Test,具有一个方法test,该方法的参数类型为Shape,然后在此方法体中调用Shape的draw方法.3.在TestShape中添加main方法,调用Test的test方法,随意生成一个Shape子类的实例,并将该实例当做参数传入。十、关键字a)This1.this可以看成是一个变量,它的值是当前对象的引用2.在类的成员方法的使用this关键字代表使用该方法的对象的引用3.可以使用this关键字处理成员变量和参数重名的问题4.不能用在static代码块中5.可以在构造方法中用this(参数列表)访问本类中的其他构造方法,必须放在第一行b)Super1.super可以看成是一个变量,它的值代表的是当前对象父类的引用2.可以在类的成员方法中表示父类对象3.一般不在static代码块中应用4.在构造方法中第一句默认是的super(),必须放在第一行c)Static1.用static修饰的方法叫做静态的方法,用static的修饰的变量是静态的变量,在系统加载类的时候,首先加载静态的变量和方法2.静态的方法不能直接调用非静态的成员3.非静态的可以直接访问静态的4.静态的方法不需要所属类的任何实例引用,用类名.成员可以直接引用5.非静态的仅限于实例引用d)Package1.Java的包机制2.用点来表示包的层次结构3.必须放到java文件的第一行(在package关键字上面只能有注释和空白)e)Import1.导包关键字2.引用不同包中的类必须导包3.程序在执行的时候会自动加载java.lang包中的所有类,所以在用到lang包中的类的时候不用导包f)Final1.用final修饰的变量不能被改变2.用final修饰的方法不能被重写3.用final修饰的类不能被继承十一、抽象类抽象类的特点1.抽象类用abstract修饰2.抽象类不能直接实例化3.抽象类中可以用main方法4.用abstract修饰的方法是抽象的方法5.抽象的方法只有声明,没有实现6.有抽象方法的类必须是抽象类7.抽象类一般作为其他类的父类8.抽象类作为其他类的父类,抽象的方法必须重写9.抽象类可以没有抽象的方法举例a)由于Shape类计算周长和面积的方法无法确定,那么就可以将这样的方法声明为抽象的,以便在具体的子类中进行实现。十二、接口接口的原理在软件工程中,经常将一个大的项目分由不同的开发小组共同开发,各个小组的开发工作是并行的。在很多时候,对于不同小组的程序员来说,清楚地说明各自的软件如何相互作用,并就此达成统一“约定”是很重要的。这种情况下,每一小组都可以在对其他小组怎么编写代码一无所知的情况下,就能编写自己的代码,并且各自小组编写的代码能很好的协同工作。接口就是这样的“约定”。接口的特点1.接口可以看做是一个特殊的抽象类2.接口不能直接实例化3.接口中只有常量和抽象的方法4.接口中没有main方法5.接口可以被类实现,实现的关键字是implements6.类实现接口就必须实现类的方法7.接口之间可以多继承8.接口与类之间也存在多态性(也可以理解接口是类的父类)十三、作业1.某公司的雇员分为以下若干类:a)Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(intmonth)根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。b)SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪c)HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:
本文标题:面向对象和面向对象的高级概念
链接地址:https://www.777doc.com/doc-3968287 .html