面向对象的三大特征:
封装、继承与多态;
3.1. 包
3.1.1 自定义包
语法:package <包名>
注意点:
声明一个包的语句必须在类的第一行
3.1.2 包的导入
import <包名> <类名>
示例:
import java.util.*;//导入java.util包中所有的类
import java.util.ArrayList; //导入java.util包中ArrayList类
示例:
在Hero类中使用Tree类,Hero类与Tree类不在同一个包中
package com.java.oriented.dota.scene;
public class Tree {
public void clear() {
}
}
package com.java.oriented.dota.figure;
import com.java.oriented.dota.scence.Tree;
public class Hero {
public void eatTree(Tree tree) {
tree.clear();
}
}
3.1.3 包的访问权限
一个包中具有缺省访问权限的成员只能在同一个包中被引用。
如果一个包中的成员的访问权限为 public,那么这些成员才能被其他包中的类所引用。
1. public 访问权限成员(类、属性和方法)
2. public 成员可以被其他包中的类访问,public 类中的protected成员可以被由它派生的
在其他包中的子类访问;
3.2 继承
3.2.1 继承的概述
1. 继承是面向对象程序设计的一个重要特征,它是通过继承原有类派生出子类,进而构造出更为复杂的子类
2.子类既有新定义的行为特征,又继承了原有类的行为特征。
3.父类与子类存在着包含与被包含的关系,是一种is-a的关系。
4.在Java中继承可以在现有类的基础上进行功能的扩展,这样能够更加快速地开发出新类,使新类不仅可以复用当前类的特征和行为,而且还可以定义自己的特征和行为。
5. 通过继承可大幅度提高代码的复用性,减少代码量,便于程序的后期维护。
语法:
[修饰符] class 子类名 [extebds 父类名] {
//类定义部分
}
3.2.2 继承的实现
示例:定义父类武器,以及子类圣剑和长矛
public class Sword {
string name;
int attackValue;
}
public Sword(string name,int attackValue) {
system.out.println ("--执行武器父类Weapon的构造方法--")
this.name = name;
this.attackValue = attackValue;
}
public void attack() {
system.out.printle("武器名:"+name+"\t"+"攻击值:"+attackValue);
}
public class Sword extends Weapon {
public Sword (string name, int attackValue) {
super(name , attackValue);
}
}
public class Spear extends Weapon {
public Spear (string name , int attackValue) {
super(name,attackValue)
}
}
public class ExtendsTest {
public static void main(string[] args) {
sword word = new sword("圣剑",300);
word.attack();
spear.spear = new spear ("长矛",250);
spear.attack();
}
}
3.3 重载与重写
3.3.1 重载
Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。
注意:
1.同一个类中方法名相同,常熟列表不同。
2.返回值类型不能用于区分方法的重载。
3.3.2 重写
1.在子类中可以根据需要对从父类中继承来的方法进行重写
2.重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。重写方法不能使用比被重写的方法更严格的访问权限。
3.重写方法不能声明抛出比被重写方法范围更大的异常类型。
3.4 多态
多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
在编译时,可以通过父类的引用指向子类对象,而在运行时,则通过父类所指向的子类对象,调用子类中重写父类的方法。
3.4.1 多态应用
多态的具体操作示例:
public class Figure {
protected String name;
public void attack() {
}
public void run() {
system.out.println("在奔跑")
}
}
public class Warrior extends Figure {
public void attack() {
system.out.println(this.name+"正在物理攻击.....")
}
}
public class Master extends Figure {
public void attack(){
system.out.println(this.name+"正在魔法攻击.....")
}
public static void main(String[] args) {
Fogure master = new Master();
master.name = "恶魔巫师";
Figure warrior = new Warrior();
warrior.name = "撼地神牛";
master.attack();
warrior.attack();
}
}
3.4.2 引用变量的强制类型转换
3.4.3 instance of 运算符