面向对象程序设计
知识点
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
- 一个类可以 包含变量和方法
- 每个类都有 构造方法。如果没有显示地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法,在 创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法,下面是一个构造方法示例
public class Puppy {
public Puppy() {
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
创建对象
对象是根据类创建的。在 Java 中,使用 关键字 new 来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键件 new 来创建一个对象
- 初始化:使用 new 创建对象时,会调用构造方法初始化对象。运行后会输出:小狗的名字是 tommy
public class Puppy{
public Puppy(String name){
// 这个构造器仅有一个参数:name
System.out.println("小狗的名字是:"+name);
}
public static void main(String[] args){
// 下面的语句将创建一个 Puppy 对象
Puppy puppty = new Puppy("tommy");
}
}
访问实例变量和方法
访问控制修饰符
在 Java 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。
java 支持以下访问权限。
- private : 在同一类内可见使用对象有:变量、方法、构造方法。不能修饰类(外部类)
- public:对所有类可见,使用对象:类、接口、方法、属性
- protected:对同一包和所有子类可见。使用对象:变量、方法。不能修饰类(外部类)
有以下方法继承的规则
- 父类中声明为 public 的方法在子类中也必须声明为 public
- 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
- 父类中声明为 private 的方法,不能够被继承。
abstract 修饰符
- 抽象类不能用来实例化对象,声明抽象类的 唯一目的是为了将来对该类进行扩充。
- 如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
- 抽象类可以包含抽象方法和非抽象方法。
- 抽象方法是一种 没有任何实现的方法,该方法的具体实现由子类提供。
- 任何 继承抽象类的子类必须实现父类所有的抽象方法,除非该子类也是抽象类。
- 如果一个类包含若干抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法,抽象方法的声明以分号结尾
abstract class Caravan{
private double price;
private String model;
private String year;
public abstract void getFast();// 抽象方法
public abstract void changeColor();
}
public abstract class SuperClass{
abstract void m(); // 抽象方法
}
class SubClass extends SuperClass{
void m(){ // 实现抽象方法
}
}
java 继承的特性
-
子类可以拥有父类非 private 的属性、方法
-
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
-
子类可以用自己的方式实现父类的方法。
-
继承可以使用关键字 extends 和 implements 这两个关键字来实现。
-
extends 关键字,在 Java 中 ,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类
-
使用 implements 关键字可以变 相的使 Java 具有多继承的特性,使用范围为 类继承接口的情况,可以 同时继承多个接口(接口和接口之间使用逗号分隔)。
public class Animal {
private String name;
private int id;
public Animal(String myName,String myId){
// 初始化属性值
}
public void eat(){// 吃东西方法的具体实现}
public void sleep(){// 睡觉方法的具体实现}
}
public class Penguir extends Animal {
}
public interface A{
public void eat();
public void sleep();
}
public interface B{
public void show();
}
public class C implements A,B {
}
解题技巧
下午考试的第 5、6 题为二选一做答,都是程序填空,原理一摸一样,只不过一个用 C++语言,一个用 Java 语言编写的程序,并且这个填空 只考基本语法,不涉及算法,比之第 4 题算法设计的填空要简单很多,完全可以拿满分。
面向对象的程序填空分为两类,一个是考察纯定义,如接口类、抽象类、接口类中的函数定义等,这些根据程序代码可以快速判断出。
另一类,就是 关于设计的,填写函数体,但是这个函数体 并不是要写一段真正的程序实现代码,而是调用形式的,都是有调用函数的,这些调用函数一般在程序中,或者在说明和类图中可以找到,考察的是调用形式。
真题一
真题二
