
尚硅谷Java培训佟刚Java基础面向对象.ppt
56页Java 面向对象,讲师:佟刚新浪微博:尚硅谷-佟刚,尚硅谷: 关键字函数的参数传递package语句/import语句,学习目标,类和对象理解面向对象的概念类的定义声明类、属性、方法创建、使用对象对象的生命周期匿名对象信息的封装和隐藏构造方法方法的重载this 关键字函数的参数传递package语句/import语句,理解面向对象的概念,面向过程 在一个结构体中定义窗口的大小,位置,颜色,背景等属性,对窗口操作的函数与窗口本身的定义没有任何关系,如HideWindow,MoveWindow,MinimizeWindow,这些函数都需要接受一个代表要被操作的窗口参数 ,是一种谓语与宾语的关系 面向对象 定义窗口时,除了要指定在面向过程中规定的那些属性,如大小,位置,颜色,背景等外,还要指定该窗口可能具有的动作 ,如隐藏,移动,最小化等这些函数被调用时,都是以某个窗口要隐藏,某个窗口要移动的语法格式来使用的 ,这是一种主语与谓语的关系面向对象的三大特征封装 (Encapsulation)继承 (Inheritance)多态 (Polymorphism),面向对象的思想概述,面向对象的编程思想力图使计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。
类(class)和对象(object)是面向对象方法的核心概念类是对一类事物描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)如果将对象比作汽车,那么类就是汽车的设计图纸所以面向对象程序设计的重点是类的设计,而不是对象的设计面向对象的思想概述,,数据(属性),方法,类,,,,,,,,,,new Animal(),new Animal(),…,类和对象举例,//定义一个类 public class Animal { public int legs; public void eat() { System.out.println(“Eating.”); } public void move() { System.out.println(“Moving.”); } } //声明并创建一个Animal类的对象,将该对象命名为xb Animal xb = new Animal(); //调用对象xb中的方法 xb.eat();,类的定义,public class Animal { public int legs; public void eat(){ System.out.println(“Eating.”); } public void move(){ System.out.println(“Moving.”); } }legs是类的属性 ,也叫类 成员 变量 。
eat,move是方法也叫类的 成员 函数声明类,语法格式:[< 修饰符>] class < 类名> { [<属性声明>] [<构造器声明>] [<方法声明>]}说明:修饰符public:类可以被任意访问 类的正文要用{ }括起来举例: public class Person{ private int age ; //声明私有变量 age public void showAge(int i) { //声明方法showAge age = i; }},声明属性,语法格式:[<修饰符>] 类型 < 属性名> [=初值] ; 说明:修饰符 private: 该属性只能由该类的方法访问 修饰符 public: 该属性可以被该类以外的方法访问 类型:任何基本类型,如int、boolean或任何类举例:public class Person{ private int age; //声明private变量 age public String name = “Lila”; //声明public变量 name},属性有时也称为:数据成员(数据),成员变量(变量),声明方法,语法格式: <修饰符> <返回类型> <方法名>([< 参数表>]) { [< 语句>]} 说明: 修饰符:public,private,protected 等。
返回类型:return语句传递返回值没有返回值:void举例: public class Person{ private int age; public int getAge() { return age; } //声明方法getAge public void setAge(int i) { //声明方法setAge age = i; //将参数i的值赋给类的成员变量age }},方法有时也称为:成员函数(函数),对象的创建和使用,使用 new +构造方法 创建一个新的对象;使用 “对象名.对象成员” 的方式访问对象成员(包括属性和方法);,public class Animal { public int legs; public void eat(){ System.out.println(“Eating.”); } public viod move(){ System.out.println(“Move.”); }},举例: public class Zoo{ public static void main(String args[]){ Animal xb=new Animal(); xb.legs=4; System.out.println(xb.legs); xb.eat(); xb.move(); }},对象的创建和使用,如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。
举例: public class Zoo{ public static void main(String args[]){ Animal xb=new Animal(); Animal xh=new Animal(); xb.legs=4; xh.legs=0; System.out.println(xb.legs); //4 System.out.println(xh.legs); //0 xb.legs=2; System.out.println(xb.legs); //2 System.out.println(xh.legs); //0 }},提示,类的访问机制:在一个类中的访问机制:类中的方法可以直接访问类中的成员变量有一个例外)在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员对象的产生,class Person{ int age; void shout() { System.out.println(“oh,my god! I am “ + age); }}Person p1 = new Person();执行完后的内存状态,对象的产生,当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。
除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及前面讲过的数组对象的使用,创建新的对象之后,我们就可以使用“ 对象名.对象成员 ”的格式,来访问对象的员 class TestPerson{ public static void main(String[] args) //上面程序运行的内存布局如下图 { Person p1 = new Person(); Person p2 =new Person(); p1.age = -30; p1.shout(); p2.shout(); }},对象的生命周期,匿名对象,我们也可以不定义对象的句柄,而直接调用这个对象的方法这样的对象叫做匿名对象, 如:new Person().shout(); 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象 我们经常将匿名对象作为实参传递给一个函数调用练习1,1.创建一个Person类,其定义如下:,要求:(1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()方法显示age值,调用addAge()方法给对象的age属性值增加2岁。
2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系2. 利用面向对象的编程方法,设计类Circle计算圆的面积学习目标,类和对象信息的封装和隐藏信息封装和隐藏的必要性private 关键字构造方法方法的重载this 关键字函数的参数传递package语句/import语句,信息的封装和隐藏(1),使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题version1)public class Animal { public int legs; public void eat(){ System.out.println(“Eating.”); } public void move(){ System.out.println(“Moving.”); } }public class Zoo{ public static void main(String args[]){ Animal xb=new Animal(); xb.legs=4; System.out.println(xb.legs); xb.eat();xb.move(); }},问题:xb.legs=-1000;,应该将legs属性保护起来,防止乱用。
保护的方式:信息隐藏,信息的封装和隐藏(2),Java中通过将数据声明为私有的(private),再提供公开的(public)方法:getXXX和setXXX实现对该属性的操作,以实现下述目的:隐藏一个类的实现细节;使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性;,信息的封装和隐藏(3) (version2),public class Animal{ private int legs; //将属性legs定义为private,只能被Animal类内部访问 public void setLegs(int i){ //在这里定义方法 eat() 和 move() if (i != 0 && i != 2 && i != 4){ System.out.println("Wrong number of legs!"); return; } legs=i; } public int getLegs(){ return legs; }}public class Zoo{ public static void main(String args[]){ Animal xb=new Animal(); xb.setLegs(4); //xb.setLegs(-1000); xb.legs=-1000; //非法 System.out.println(xb.getLegs()); }},。
