面向对象开发期末复习概述(三)

面向对象开发期末复习概述(三)

第4章对象和类 & 第5章子类和继承&第6章 接口与实现

  1. OOP是:Object Oriented Programming(面向对象编程)

类和对象的区别 :
类:生成对象的模板,是对一类事物的描述,是抽象的概念上的定义。
对象:对象是实际存在的该类事物的每个个体,因而也称为实例。
2.Java中类的定义格式:
[类的修饰符] class 类名 [extends 父类名] {
变量声明;
构造方法定义;
其他方法定义;
}
声明成员变量:
[public | protected | private] [static] [final] 类型名 成员变量名;
创建一个类的对象的格式:
类名 对象名=new构造方法(实际参数);
在类的外部,访问类中的变量和调用类中的方法格式:
对象名.变量名
对象名.方法名(实际参数)
方法的定义格式:
[public | protected | private] 返回值类型 方法名(参数列表) [throws 异常] {
….;
}
3.类的修饰符
(1)类访问权限修饰符:public(公共的)
用关键字public修饰一个类,表明该类可以被任何其他类使用。如果省略,则这个类只能在它所在包中访问。
(2)abstract(抽象的)
用abstract修饰的类是一个不完整的类,称为抽象类,该类中含有没有方法体的抽象方法。抽象类没有具体实例。
(3)final(最终的)
用final修饰的类称为最终类。最终类不能有子类。
4.类的成员
一个类定义中主要可以有以下2种类型的成员。
(1)属性(成员变量)
类中声明的变量称为域,用来描述类的属性或状态。一个类中的域既可以是基本数据类型,也可以是其他类的对象等。
(2)方法(method)
是对类中变量进行操作的可执行代码序列,定义了该类对象所具有的行为。
5.属性的初始化
一个类中如果没有定义构造方法,则编译器会自动生成一个没有参数的构造方法,用来初始化类对象,并将类中变量自动初始化为该类型的默认值。
① 整型初始化为0;
② 实型初始化为0.0f、0.0d;
③ 逻辑型初始化为false;
④ 字符型初始化为’ \u0000’;
⑤ 类对象初始化为null,表明引用不指向任何内存地址。
6.成员变量的访问控制
类的属性在类的里面都是可见的,类中的所有方法都可以使用它们。
在类的外部,类中属性的可见性由关键字public、private、protected来控制,称为类的属性的访问权限修饰符。
4种访问权限所使用的修饰符和含义:
① public:用public修饰的成员可以被所有其他的类来访问。
② private:类中限定为private的成员只能被这个类本身访问,在类的外部,类的private成员是不可见的 。
③ protected:类中限定为protected成员。只有其子类(不论是否在同一个包中)以及同一个包内的其他类,才能访问该类的protected成员。
④ 缺省的:这时类的成员具有包访问权限。
注意:方法定义中的参数和方法体中的变量都是局部变量,不能使用上面的访问权限修饰符。
7.方法的访问控制修饰符
方法作为类的成员也有4种访问权限:public、private、protected和缺省的(没有访问控制修饰符)。含义与成员变量相同。
8.封装和公开
如果把类中的变量用public修饰,则这些变量完全公开,可以直接访问和修改。
面向对象程序设计中,通过类和类成员的访问控制级别的限定,较好地解决了封装和公开的问题。如果将成员变量标识为private,则它在类的外部不可见,使数据得到了封装。为了能够访问这些私有数据,就必须提供public或者protected的成员方法来获取(get)和设置(set)这些private变量的值。
通常获取和设置private变量的方法命名采用以下形式:
   [public|protected] 变量类型 get变量名(){
   return 变量名;
   }
  [public|protected] void set变量名(类型 参数名){
  合法性检查并赋值;
   }
9.静态变量
用static修饰的变量称为静态变量。
当一个变量用static修饰时,表明它不属于任何一个类的具体对象,而是所有对象共享,static变量这个存储单元被所有对象共享。该类的任何一个对象访问和修改它时,都是对这个共享的存储单元进行操作。
由于静态变量属于整个类,即使没有创建任何对象时,类中的static变量也会存在,也可以使用静态变量,这时可以通过类名作前缀访问静态变量:
类名.静态变量
若创建了某个类的具体对象后,可以通过类名或对象名作前缀访问静态变量:
对象名.静态变量
10.最终变量(final)
若类中的变量用关键字final修饰,则表明该变量一旦被显示的值(不能默认初始化)初始化后就不可能重新再赋值。因此,final修饰的变量通常是程序中不能改变的常量 。
public static final 类型 常量名=初始值;
常量名大写,名字中包含多个单字时用下划线分隔。
圆周率常量Math.PI、自然常数Math.E等。基本数据类型包装类中的int类型的最大值Integer.MAX_VALUE、最小值Integer.MIN_VALUE等。
用final修饰的引用变量,也不能重新赋值来引用另一个对象,但可以修改final修饰的引用对象内的数据。
11.静态(static)方法
用static修饰的方法称为静态方法,它不属于类的具体对象,而是整个类的类方法。
两种方式调用静态方法:
类名.静态方法
对象名.静态方法
一个类里面的静态方法中只能处理静态变量;静态方法中直接调用的方法只能是静态方法。
12.最终(final)方法
关键字final可用来修饰类中的方法,称为最终方法。将一个方法标识为final的主要目的是防止子类重新定义继承自父类的方法。
13.抽象(abstract)方法
用关键字abstract修饰的方法,称为抽象方法。抽象方法只有方法头,没有方法体,而是以一个分号结束。抽象方法的声明通常出现在抽象类和接口中。
方法修饰符abstract和final不可能同时使用。
14.构造方法
构造方法的规则
① 构造方法名称必须与类名相同。
② 构造方法一定不能有返回值类型。
③ 构造方法可以使用3种访问控制修饰符public、protected、private或缺省的,对应的访问级别与类成员一样。
④ 构造方法不能用static修饰,因为构造方法只用于创建类的实例。
⑤ 如果类中不定义任何构造方法,编译器会自动生成默认的无参数的构造方法;如果类中定义了构造方法,编译器不会自动生成默认构造方法。
⑥ 类中的构造方法可以根据需要重载多个参数列表不同的版本。这些重载的构造方法可以相互调用,但必须通过this()调用,且必须作为构造方法内的第一条语句。
⑦ 子类构造方法中可以调用其直接父类的构造方法,但必须通过super()调用,且必须作为子类构造方法内的第一条语句。
15.构造方法的重载
当一个类因构造方法的重载而存在多个构造方法时,创建该类的对象的语句会根据给出的实际参数的个数、参数的类型、参数的顺序自动调用相应的构造方法来完成对象的初始化工作。
当一个类有多个重载的构造方法时,构造方法里面可以调用类的其他构造方法,但必须通过this()调用,且必须作为构造方法内的第一条语句。
16.关键字this
① 类定义中使用this,当创建该类的对象后,this代表类对象自身。
② 类中通过this、后跟圆点运算符,之后是类的实例变量名或实例方法名可以使用本类中的变量和方法。this.变量 this.方法()
③ 静态变量和静态方法不能通过this作前缀来使用。
④ 类中有多个重载的构造方法时,构造方法中可以通过this()调用其他构造方法,但必须是构造方法中的第一条语句。
17.类成员的继承和重新定义
定义子类的格式
[类的修饰符] class B extends A {
类的变量定义;
构造方法定义;
方法定义;
}
关键字extends表示继承关系,即类B是类A的子类、类A是类B的父类。
注:Java中一个类只能有一个直接父类,称为单继承,但一个父类可以派生多个子类。Java的根类是Object类。
类成员的继承
子类继承某个父类后,子类便具有父类的特性,从程序代码的角度来说,子类便拥有了父类的所有非私有(private)变量和方法,这些变量和方法通过继承都变成了子类的成员。
子类添加成员
在子类中可以加入自己的变量和方法。
重新定义从父类继承来的成员——变量隐藏和方法覆盖
① 变量隐藏
当一个父类变量不适合子类时,子类可以把从父类继承来的同名变量重新定义。子类若要引用父类的同名变量,要用关键字super作前缀加圆点操作符引用父类的同名变量:
super.变量名
② 方法覆盖(方法重写)
把从父类继承来的方法重写,称为方法覆盖(重写)。子类重写父类的方法时,方法头要与父类一样,只是对方法体重写,从而完成满足子类的要求。
如果子类中调用被覆盖的父类中的同名方法,通过super关键字作前缀加圆点操作符实现调用:
super.方法名()
方法覆盖的规则
参数列表完全相同;返回类型相同;子类方法访问权限不能缩小;子类方法不能抛出新的异常。
方法覆盖与方法重载的区别:
①方法的重载是指:在同一个类里定义多个同名方法,它们的参数列表不同,可以有不同的返回值类型。重载方法调用时根据其参数类型、个数和顺序来区分。
②方法覆盖(重写)是指:子类把继承来的方法重新定义,即在不同的类里定义同名的方法,方法头一样,但方法体不同,即方法实现的功能不同,从而满足子类自己的特殊要求。
18.关键字super
关键字super的使用规则:
① super.变量名:引用被子类隐藏的父类中的变量;
② super.方法名:调用被子类覆盖的父类中的方法;
③ super(参数):子类构造方法中调用父类构造方法,但必须是子类构造方法中的第一条语句。this( )和super( )调用只能有其一,不能同时都有。
19.父类和子类对象的转换
Java语言允许父类对象和子类的对象之间进行类型转换。子类对象可以自动向父类对象转换,但父类对象转换为子类对象时,必须要强制类型转换,转换的格式为:
(子类名)父类对象
注:当子类实例赋值给父类对象引用后,父类对象引用的实际上是子类实例,但通过这个父类引用只能引用子类中继承下来的那些成员。即若成员变量出现隐藏,引用的是父类变量。但若成员方法出现覆盖,引用的是子类方法。
例:public class Animal{ }
public class Cat extends Animal{ }
 Cat c1= new Cat();
Animal a = c1;
20.提问:
一个java源文件可以写多个类吗?
o可以,但必须只能有一个公有类,并且文件名和公有类的类名相同。
类中有哪些成员?有属性(成员变量),方法,构造器(构造方法)
构造方法和普通方法的区别?
构造方法没有返回值,方法名必须和类名相同,需要用new语句调用构造方法。
实例成员和静态成员的区别?
实例成员:是属于对象实例的,用对象.成员名称语法调用
静态成员:和对象实例无关,是属于类本身的,用类名.成员名称语法调用
静态方法可不可以直接调用同一个类中的非静态方法?
不可以,静态方法不能直接调用一个非静态成员,需要用对象调用。
类的继承是谁继承谁?
是子类继承了父类,子类也称为派生类,父类也称为超类或基类
子类继承了父类的什么东西?
子类可以继承父类的数据域(属性),方法,但构造器不能继承
私有成员能被子类继承吗?
不能继承。
Object是什么类?
这个所有类的根类,任何类如果没有写显式的继承语句,默认都是直接继承Object类的
java中是单继承还是多继承?
是单继承,一个子类只能有一个父类
21.方法调用过程中参数的传递:按值传递,但不同类型参数,效果不同。要求结合程序会分析程序运行结果 。
21.抽象类
一种表示抽象概念、不能被实例化的类,其作用是为派生类提供一个恰当的父类。
Java中的抽象方法是只有方法头、没有方法体的方法。
如果一个类中包含抽象方法,则该类必须声明为abstract。
抽象方法只能存在于抽象类(或接口)中。如果一个类继承自某个抽象类,而没有具体实现其父类中的所有抽象方法,则该类也必须声明为抽象类(用abstract修饰)。
22.接口(interface)
接口实现了与类的多继承相似的功能。
Java语言的接口中,只能定义静态常量和抽象方法。由于接口中包含的方法都是抽象方法,因此, Java中的接口可以看成是一个没有具体实现的“类”。接口需要定义类来实现,都可以在类声明中使用关键字implements来声明实现某些接口。 接口的定义中包含的是抽象方法,而编写抽象方法的方法体,实现方法的特定功能都是在实现接口的类中具体完成的 。接口也可以继承。一个类可以同时实现多个接口。
23.自定义接口和实现接口
定义好的接口,如果自成一个文件,文件名保存为:接口名.java。
接口的定义格式:
[public] interface 接口名称 [extends 父接口名列表]{
//静态常量
[public][static][final] 数据类型 变量名=常量值;
//抽象方法
[public][abstract] 返回值类型 方法名(参数列表);
}
说明:(1)接口中的成员变量必须是public(公有的)、static(静态的)和final(最终的)。
   (2)接口中的成员方法必须是public(公共的)和abstract(抽象的)。
   (3)接口也具有继承性,通过关键字extends表明继承关系。
24.实现接口
一个类可以实现一个或多个接口,声明实现接口的关键字是implements,后跟要实现的接口名。如果接口中有多个抽象方法,而实现接口的类只需使用其中的一个,也必须为其他抽象方法加上花括号,只是花括号中没有语句。
实现接口的类定义格式:
[修饰符] class 类名 [extends 父类名] implements 接口A,接口B,…
{
类的成员变量和成员方法;
为接口A中的所有方法编写方法体,实现接口A;
为接口B中的所有方法编写方法体,实现接口B;
}
25.包
包实际上就是物理上的文件夹,可以把类放到不同的包中。
问题:
把一个类放到包中,需要在类中加上什么语句?
需要加上包声明package语句,必须写在源文件的第一句。
什么时候需要导入类?用什么语句?
当使用的类和当前类并不在同一个包中的时候,用import语句导入。
java中哪个包中的类是自动导入的?
java.lang包
什么叫做完整类名?
顶层包名.子包名.类名
静态导入语句有什么作用?
在使用类中的静态成员的时候前面不需要加类名前缀。
常用的工具包:
语言包(java.lang):java.lang被自动导入所有的程序。
输入输出包(java.io):文件操作、输入输出流相关的类在这个包里
实用程序包(java.util):Scanner,日历、日期时间类等,集合框架中的接口、类很多都在这个包里
抽象窗口工具集包(java.awt):
网络包(java.net):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Taciturn knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值