java技术从入门到精通(孙鑫)学习笔记-Lesson2(面向对象下).doc

上传人:PIYPING 文档编号:10613206 上传时间:2021-05-26 格式:DOC 页数:13 大小:73KB
返回 下载 相关 举报
java技术从入门到精通(孙鑫)学习笔记-Lesson2(面向对象下).doc_第1页
第1页 / 共13页
java技术从入门到精通(孙鑫)学习笔记-Lesson2(面向对象下).doc_第2页
第2页 / 共13页
java技术从入门到精通(孙鑫)学习笔记-Lesson2(面向对象下).doc_第3页
第3页 / 共13页
java技术从入门到精通(孙鑫)学习笔记-Lesson2(面向对象下).doc_第4页
第4页 / 共13页
java技术从入门到精通(孙鑫)学习笔记-Lesson2(面向对象下).doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《java技术从入门到精通(孙鑫)学习笔记-Lesson2(面向对象下).doc》由会员分享,可在线阅读,更多相关《java技术从入门到精通(孙鑫)学习笔记-Lesson2(面向对象下).doc(13页珍藏版)》请在三一文库上搜索。

1、类的继承l 理解继承是理解面向对象程序设计的关键。l 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。l 在Java中,不允许多继承。class Animalint weihght,height;void eat()System.out.println(animal eat);void sleelp()System.out.println(animal sleep);void breath()System.out.println(animal breath);class Fish extends Animalclass Int

2、egrationpublic static void main(String args)Animal an=new Animal();Fish fh=new Fish();an.breath();fh.breath();调用编译器的命令为: javac Animal.java调用执行的命令为: java Integration注 :编译器的对象是java文件 执行的对象是 包含main方法的那个类运行结果为: animal breath animal breath方法的覆盖l 在子类中定义一个与父类同名、返回类型、参数类型相同一个方法,称为方法的覆盖。l 覆盖发生在子类与父类之间。注:方法的重

3、载发生在同一个类当中。class Animalint weihght,height;void eat()System.out.println(animal eat);void sleelp()System.out.println(animal sleep);void breath()System.out.println(animal breath);class Fish extends Animalvoid breath() /子类与父类的方法完全一致,发生覆盖。System.out.println(fish bubble);class Integrationpublic static voi

4、d main(String args)Animal an=new Animal();Fish fh=new Fish();an.breath();fh.breath();运行结果为: animal breath fish bubble特殊变量superl 特殊变量super,提供了对父类的访问。l 可以使用super访问父类被子类隐藏的变量或覆盖的方法。l 每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。class Animalint weihght,height;void eat()System.out.println(a

5、nimal eat);void sleelp()System.out.println(animal sleep);void breath()System.out.println(animal breath);class Fish extends Animalvoid breath()super.breath();System.out.println(fish bubble);class Integrationpublic static void main(String args)Animal an=new Animal();Fish fh=new Fish();an.breath();fh.b

6、reath();运行结果为: animal breath animal breath fish breathl 每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。class Animalint weihght,height;Animal()System.out.println(animal construct);void eat()System.out.println(animal eat);void sleelp()System.out.println(animal sleep);void breath()System.ou

7、t.println(animal breath);class Fish extends AnimalFish() /这里的super()被隐藏了,实际上子类的构造方法的第一句都隐含地调用super()System.out.println(fish construct);void breath()/super.breath();System.out.println(fish bubble);class Integrationpublic static void main(String args)/Animal an=new Animal();Fish fh=new Fish();/an.brea

8、th();/fh.breath();运行结果为了: animal construct fish construct class Animal /发现编译后报错int weight,height;Animal(int weight,int height)System.out.println(animal construct);void eat()System.out.println(animal eat);void sleelp()System.out.println(animal sleep);void breath()System.out.println(animal breath);cla

9、ss Fish extends AnimalFish()/super(); /*编译报错。因为构造方法是不能继承的,所以调用父类的构造方法就不能用 Animal()的形式,这就得借助super()来调用了。默认情况下,子类创建的构造函数的第一条语句就会调用super()方法,super()方法即代表父类的构造方法。现在子类Fish的构造方法中默认调用的是super(),但却在父类中找不到这样的构造函数,因为父类中只存在带参数的构造方法,这样造成不匹配就会在编译的时候报错。要解决这个问题就得解决匹配的问题,应在子类Fish的构造方法中定义带参数的super()方法如: super(30,40)

10、,见下面的修改的程序*/System.out.println(fish construct);void breath()/super.breath();System.out.println(fish bubble);class Integrationpublic static void main(String args)/Animal an=new Animal();Fish fh=new Fish();/an.breath();/fh.breath();class Animalint weight,height;Animal(int weight,int height)System.out.

11、println(animal construct);void eat()System.out.println(animal eat);void sleelp()System.out.println(animal sleep);void breath()System.out.println(animal breath);class Fish extends AnimalFish() super(40,50);System.out.println(f ish construct);void breath()/super.breath();System.out.println(fish bubble

12、);class Integrationpublic static void main(String args)/Animal an=new Animal();Fish fh=new Fish();/an.breath();/fh.breath();运行结果为: animal construct fish construct-多态性l 通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。class Animalint weight,height;Animal(int weight,int height)void eat()System.out.println(animal e

13、at);void sleelp()System.out.println(animal sleep);void breath()System.out.println(animal breath);class Fish extends AnimalFish() super(40,50);void breath()System.out.println(fish bubble);class Integrationstatic void fn(Animal an)an.breath();public static void main(String args)Fish fh=new Fish();Anim

14、al an;an=fh;Integration.fn(an);运行结果为: fish bubble l 当我们将子类对象 的引用传递给声明为父类的一个对象变量,如果子类有的方法,就调用子类的方法,如果子类没有这个方法,那么就调用父类的方法。class Animalint weight,height;Animal(int weight,int height)void eat()System.out.println(animal eat);void sleelp()System.out.println(animal sleep);void breath()System.out.println(an

15、imal breath);class Fish extends AnimalFish() super(40,50);/*void breath()System.out.println(fish bubble);*/ /子类中没有定义breath()这个方法,子类会调用父类的breath()方法, /这就是运行结果显示为调用父类的breath()方法的根本原因。class Integrationstatic void fn(Animal an)an.breath();public static void main(String args)Fish fh=new Fish();Animal an;

16、an=fh;Integration.fn(an);运行结果为: animal breath (子类继承了父类的breath()方法)操作符instanceof:用来判断一个对象是否是一个类的实例class Animalint weight,height;Animal(int weight,int height)void eat()System.out.println(animal eat);void sleelp()System.out.println(animal sleep);void breath()System.out.println(animal breath);class Fish

17、 extends AnimalFish() super(40,50);class Integrationstatic void fn(Animal an)an.breath();public static void main(String args)Animal an=new Animal(30,40); /注意:类Animal中的构造方法是带参数/的,这里初始化Animal对象时也要带上参数Fish fh=new Fish();if(an instanceof Animal)System.out.println(an is Animals instance);if(fh instanceof

18、 Fish)System.out.println(fh is fishs instance);运行结果为:an is Animals instance fh is Fishs instanceclass Animalint weight,height;Animal(int weight,int height)void eat()System.out.println(animal eat);void sleelp()System.out.println(animal sleep);void breath()System.out.println(animal breath);class Fish

19、extends AnimalFish() super(40,50);class Integrationstatic void fn(Animal an)an.breath();public static void main(String args)Animal an=new Animal(30,40); /注意:类Animal中的构造方法是带参 / 的, 这里初始化对象Animal对象时也要带上参数Fish fh=new Fish();an=fh; /把子类对象赋给了父类对象,则父类的实例也成了子类的实例if(an instanceof Fish)System.out.println(an i

20、s Fishs instance);elseSystem.out.println(an isnt Fishs instance);if(an instanceof Animal)System.out.println(an is Animals instance);elseSystem.out.println(an isnt Animals instance);if(fh instanceof Animal)System.out.println(fh is Animals instance);elseSystem.out.println(fh isnt Animals instance);运行结

21、果为: an is Fishs instance an is Animals instance fh is Animals instance-面向对象的程序设计l 问题:求一个长方形的周长和面积。以面向过程的程序设计方式思考:1、确定长方形周长和面积的算法。2、编写两个方法(函数)分别计算长方形的周长和面积。3、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。面向过程的程序设计代码:class Rectangle /保存为 Rectangle.java文件static int perimeter(int length,int width)return 2*(len

22、gth+width);static int area(int length,int width)return length*width;public static void main(String args)System.out.println(perimeter=+Rectangle.perimeter(5,4);/由于定义的/是静态的方法,故可以直接用类名来调用。System.out.println(area=+Rectangle.area(5,4);/理同上运行结果为: perimeter=18 Area=20面向对象的程序设计l 问题:求一个长方形的周长和面积。以面向对象的程序设计方式

23、思考:1、 一个长方形可以看成是一个长方形对象。2、 一个长方形有两个状态(长和宽)和两个行为(求周长和求积)。3、 将所有长方形的共性抽取出来,设计一个长方形类。4、 通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。class Rectangleint l,w;int perimeter()return 2*(l+w);int area()return l*w;public static void main(String args)Rectangle rec1=new Rectangle();Rectangle rec2=new Rectangle();rec1.l=4;rec1.w=6;System.out.println(perimeter of rec1=+rec1.perimeter();System.out.println(area of rec1=+rec1.area(); rec2.l=5; rec2.w=10; System.out.println(perimeter of rec2=+rec2.perimeter();System.out.println(area of rec2=+rec2.area();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1