java封装继承和多态Word下载.docx

上传人:b****5 文档编号:21284553 上传时间:2023-01-29 格式:DOCX 页数:23 大小:290.32KB
下载 相关 举报
java封装继承和多态Word下载.docx_第1页
第1页 / 共23页
java封装继承和多态Word下载.docx_第2页
第2页 / 共23页
java封装继承和多态Word下载.docx_第3页
第3页 / 共23页
java封装继承和多态Word下载.docx_第4页
第4页 / 共23页
java封装继承和多态Word下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

java封装继承和多态Word下载.docx

《java封装继承和多态Word下载.docx》由会员分享,可在线阅读,更多相关《java封装继承和多态Word下载.docx(23页珍藏版)》请在冰豆网上搜索。

java封装继承和多态Word下载.docx

}

无返回值,不需要void,方法名只能是类名

<

修饰符>

<

类名>

([<

参数列表>

]){

语句块;

classPerson{

intage;

Person(){age=18;

} //不带参数的构造方法

Person(inti){age=i;

} //带参数的构造方法

voidsetAge(inti){age=i;

classTest{

publicstaticvoidmain(String[]args){

Personp1=newPerson();

Personp2=newPerson(21);

System.out.println(p1.age);

System.out.println(p2.age);

}}

构造方法

定义构造方法

publicclassOverload{

publicvoidtest(){//无参数的构造方法

System.out.println("

无参数方法"

);

publicvoidtest(Stringmsg){//有参数的构造方法

重载方法,参数值为:

"

+msg);

publicstaticvoidmain(String[]args){

Overloadol=newOverload();

ol.test();

ol.test("

字符串"

构造方法的特殊性

1、构造方法的主要作用是完成对类对象的初始化工作

2、在创建new()中一个类的新对象时,系统会自动调用该类的构造方法为新对象初始化

3、构造方法不能由编程人员显式地直接调用

4、构造方法没有返回类型

5、构造方法的方法名与类名相同

在Java语言中,每个类都至少有一个构造方法

如果类的定义者没有显式地定义任何构造方法,java编译器将自动为类提供一个默认的构造方法,默认构造方法没有参数,默认构造方法没有方法体

在Java类中,一旦类的定义者显式地定义了一个或多个构造方法,系统将不再提供默认的构造方法

4构造方法的重载

方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或类型不同即可。

在这种情况下,该方法被称为重载,这个过程称为方法的重载(overloading)

} //带参数的构造方法,构造方法被重载了

构造方法的调用

Java编译器能根据调用方法时所传递的参数个数和类型选择相应的方法

classTest{//根据传递参数的不同,Java会自动选择相应的构造方法

5什么是静态变量

静态变量是指被static修饰的变量

静态变量属于某个类,被所有实例共享

可以通过类名访问或通过实例名访问

静态变量

编写一个猴子类(Monkey),要求

在此类中存在一个变量,用于统计

此类被实例化了多少个对象。

classMonkey{

staticintcount=0;

//声明静态变量

for(inti=0;

i<

3;

i++){

Monkeym=newMonkey();

m.count=m.count+1;

}

//通过类名访问静态变量

System.out.println(Monkey.count);

静态变量与非静态变量的区别

StaticVars1=newStaticVar();

s1.a++;

s1.b++;

System.out.println("

实例变量a="

+s1.a);

静态变量b="

+StaticVar.b);

StaticVars2=newStaticVar();

s2.a++;

s2.b++;

+s2.a);

+s2.b);

}

静态方法:

被static修饰的方法称为静态方法或类方法

static[修饰符]返回值类型方法名(类型参数1,类型参数2…){

方法体

静态方法可以直接通过类名访问

//示例化10个对象

for(inti=1;

=10;

Monkeyhouge=newMonkey();

//通过类名调用静态方法,静态方法直接通过类名来调用

Monkey.play();

6静态方法

intage=10;

//实例变量age

staticintpeach=10;

staticvoidplay(){

//访问实例变量

实例变量age="

+age);

//在静态方法内访问实例变量age

//访问静态变量

实例变量peach="

+peach);

}

静态方法只能访问静态变量,不能访问实例变量

(1)可以通过类名直接调用该类的静态方法。

(2)静态方法不能访问非静态的实例变量和实例方法。

(3)静态方法必须用static关键字修饰。

(4)静态方法不能使用this关键字和super关键字,因为这两个关键字与特定的实例相关。

(5)实例方法可以访问静态成员和非静态成员。

静态代码块不存在于任何方法体中。

静态代码块只会被执行一次,它在Java虚拟机加载类时执行

classStaticBlock{

static{//静态代码块

System.out.println(“我是静态代码块"

classOrder{

inta=1;

staticintb=1;

//静态变量

{

System.out.println("

+a);

代码块执行!

static{//静态代码块

+b);

静态代码块执行!

Order(){//构造方法

构造方法执行"

}}

⏹初始化顺序

publicstaticvoidmain(String[]args){

Orderorder=newOrder();

静态变量初始化→静态代码块→初始化静态方法→初始化实例变量→代码块→构造方法

Java中有3种变量,分别为类变量、实例变量和某个方法中临时定义的局部变量。

不同变量的生命周期不同

classCycle{

intvar1=1;

//实例变量

staticintvar2=2;

publicintadd(){

intvar3=var1+var2;

//局部变量

returnvar3;

Cyclec=newCycle();

c.add();

}}

7继承

继承是将已存在的类作为基础,建立新类的技术。

相比已存在的类,新类的定义可以增加新的数据和新的功能,也可以使用已存在类的功能,但不能选择性地继承已存在的类。

在Java的继承体系中,将已知类称为超类(或基类、父类),将新类称为子类。

提供子类可以沿用父类的某些行为和特征的一种方式。

在程序中使用继承,有利于程序的扩展

classEngineer{//工程师类

privateStringname;

privateStringaddress;

publicEngineer(Stringname,Stringaddress){

this.name=name;

this.address=address;

publicvoidintroduce(){

hello!

我是来自于:

+address+"

的"

+name);

classStudent{//学生类

publicStudent(Stringname,Stringaddress){

每增加一个类将会增加一个相应的introduce方法,这样

在程序中会存在大量的重复代码,导致程序的扩展性很差

简单而言,继承是将程序中共同的特征和行为抽取出来建立一个类,使其他类可以沿用此类中的属性和方法。

这样不仅可以减少程序中的重复代码,而且易于程序扩展

在JAVA程序中,子类继承父类使用extends关键字

[修饰符]class子类名extends超类名{

[属性定义]

[构造方法定义]

[方法声明]

1、在JAVA程序中,子类继承父类使用extends关键字

2、子类可以定义自身的属性和方法。

3、子类不能获得超类的构造方法。

继承的实现

1.建立父类

classPerson{

publicStringname=“person”;

publicvoidgetInfo(){

System.out.println(“thisisaperson”);

2.使用extends建立子父类继承关系,子类通过extends父类

classChildextendsPerson{

publicintage;

publicvoidplay(){

3,创建子类对象访问父类的属性和方法

classDemo{

publicstaticvoidmain(Stringargs[]){

Childchild=newChild();

//子类通过实例化调用父类的方法

System.out.println(child.name);

child.getInfo();

publicStringname="

Person"

;

publicintage=0;

publicvoideat(){}

publicclassChildextendsPerson{

publicStringsex;

publicstaticvoidmain(Stringargs[]){

System.out.println(child.age);

//使用父类中的age属性

child.eat();

//调用父类中的方法

Java不存在多继承,即一个子类不允许有多个父类,例如:

classChildextendsPerson,Car{}

⏹继承具有传递性,即一个类可以既是子类,同时又是父类

classManextendsPerson{//Man是Person的子类,同时又是Father的父类

publicbooleanmarrired;

publicclassFatherextendsMan{

publicStringaddress;

System.out.println(“thisisafather”):

在Java中,Object是所有类的父类,所有的Java类都直接或间接地继承了java.lang.Object类

publicclassMyClass{

/**

*publicclassMyclass相当于

*publicclassMyClassextendsObject//Object类是所有类的父类,该类实际上隐式继承了Object

*/

方法描述

clone()创建并返回此对象的一个副本

equals(Object 

obj)指示其他某个对象是否与此对象“相等”

hashCode()返回该对象的哈希码值

notifyAll()唤醒在此对象监视器上等待的所有线程

toString()返回该对象的字符串表示

wait()在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待

publicclassPerson{

publicStringname="

person"

publicvoidprintInfo(){

thisisaperson"

classChildextendsPerson{//子类继承父类

thisisachild"

Personperson=newChild();

//父类引用指向子类对象

person.printInfo();

//调用子类中的方法

/**

*Childchild=(Child)newPerson();

*自定义的数据类型不能够强制类型转换

*/

如果子类中定义了与父类中同名的属性和方法,此时需使用this调用子类中的属性和方法,要调用父类中的属性和方法需使用super

在继承关系中,super和this是两个经常使用的关键字

–this:

表示当前对象本身

–super:

表示对父类或超类的引用

publicStringname="

;

publicintage=0;

publicintage=2;

年龄是:

"

+super.age);

//子类方法中调用父类的属性或方法使用super

+this.age);

//当前本身对象中调用自己的属性或方法使用this

Childchild=newChild();

8super与this

在使用this()和super()时,需要注意以下4个方面

1、每个子类构造方法中首先会隐含地调用super(),然后执行构造方法中的代码

2、super()和this()均需放在构造方法内的第一行

3、this()和super()不能同时出现在一个构造函数中

4、this()和super()均不可以在static环境中使用。

包括static方法、static语句块

super和this的区别

在Java中,final是修饰符,可以修饰类、方法和属性

final修饰的类是最终类,其修饰方法为最终方法,final修饰的变量是常量;

最终类不可以被继承,最终方法不可以被重写(之后讲解),常量必须赋初值同时不允许被修改。

private和static修饰的方法隐式的是final方法。

finalclassBase

{

publicvoidgetInfo(){

thisissuperclass"

publicclassStudentextendsBase{//最终类不允许被继承

packagecom;

classBase

publicfinalintage;

//常量必须赋初值,且不可以重新赋值

publicclassStudentextendsBase{

9多态

多态性是指当不同的对象收到相同的消息时,产生不同的动作。

对外只有一个入口,多种实现方式。

即一个接口使用不同实例执行不同的操作。

在Java中多态有两种表现形式,即:

方法重载(overload)与重写(override)

publicclassFarmer{

publicvoidplantApple(Appleapple){

System.out.println(“plantapple”);

publicvoidplantOrange(Orangeorange){

System.out.println(“plantorange”);

当季节变化时,需要增加相应的plant方法,并修改方法的参数类型,可扩展性和可维护性很差。

方法重载应用于同一个类中

构造方法也可以重载

方法的返回类型不做为区分方法重载的条件

publicclassBook{

publicfloatgetPrice(){

return50;

publicfloatgetPrice(intbookPage){//方法名称相同,参数个数与类型不同

return50*(bookPage/100);

publicfloatgetPrice(intbookPage,floatdiscount){

return50*(bookPage/100)*discount;

Bookbook=newBook();

System.out.println(“图书的单价:

”+book.getPrice());

System.out.println(“根据页数计算的价格:

”+book.getPrice(200));

System.out.println(“根据页数折扣的价格:

”+book.getP

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

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1