1、object类常见方法
(1)Java中,所有类都直接或间接继承自java.lang.Object类,Object类可以说是Java中所有类的祖先即根类
(2)Java中任何类都继承了Object类中的方法,主要有:toString()、equals()、hashcode()、clone()、getClass()、finalize()
可以根据需求,适当地对object类中地方法如toString()、equals()进行重写,示例:
package jicheng.zhangkun.java;
class Person{
String name;
String address;
public void printInfo(){
System.out.println("Person name: "+name);
}
public void printAddress(){
System.out.println("Person address: "+address);
}
public String toString() { //重写toString(),输出打印我们想要的结果
return "person message:"+name+","+address;
}
public boolean equals(Object arg0) { //重写equals(),可判断两个实例化对象是否相同
Person p = (Person)arg0; //将arg0强制转换成Person类
if (this.name == p.name && this.address == p.address){
return true;
}
else {
return false;
}
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name = "张坤";
p.address = "上海";
System.out.println(p.toString());
Person p2 = new Person();
p2.name = "张坤";
p2.address = "上海";
System.out.println(p2.toString());
System.out.println(p.equals(p2));
}
}
运行结果:
person message:王五,北京
person message:六二,上海
false
2、继承小练习
package chiji.zhangkun.java;
class Weapon{
String name;
public void weaponAttack(){
System.out.println("武器攻击");
}
}
class Player{
String name;
String rank;
Weapon weapon;
public void attack(){
System.out.println("玩家攻击");
}
}
class K98 extends Weapon{
String name;
public void weaponAttack(){
System.out.println("98K攻击");
}
}
class M4A1 extends Weapon{
String name;
public void weaponAttack(){
System.out.println("M4A1攻击");
}
}
public class Chiji {
public static void main(String[] args) {
Player p = new Player();
p.name = "张坤";
p.rank = "荣耀王者";
p.weapon = new Weapon();
p.attack();
p.weapon = new Weapon();
p.weapon.weaponAttack();
p.weapon = new K98(); //多态
p.weapon.weaponAttack();
p.weapon = new M4A1(); //多态
p.weapon.weaponAttack();
}
}
运行结果:
玩家攻击
武器攻击
98K攻击
M4A1攻击
3、继承简单工厂模式
在智能家居项目中,有涉及到简单工厂模式,核心思想就是把指令和设备看作两个工厂,将各设备以及指令以链表的形式串联起来,再通过设备名和指令名分别进行链表的查找。对于Java面向对象的编程语言,实现简单工厂模式就很简单了,简单工厂代码示例如下:
class Fruit{
String name;
public void grup(){
System.out.println("好吃的水果");
}
public Fruit(String name){
this.name = name;
}
}
class Apple extends Fruit{
public void grup(){
System.out.println("好吃的苹果");
}
public Apple(String name){
super(name);
}
}
class Peach extends Fruit{
public void grup(){
System.out.println("好吃的莉");
}
public Peach(String name){
super(name);
}
}
class Factory{
public static Fruit getFruit(String name){
if (name == "苹果"){
return new Apple(name);
}
else if (name == "莉"){
return new Peach(name);
}
else if (name == "水果"){
return new Fruit(name);
}
else {
return null;
}
}
}
public class Test {
public static void main(String[] args) {
Factory.getFruit("水果").grup();
Factory.getFruit("苹果").grup();
Factory.getFruit("莉").grup();
}
}
在实际项目中,可把“水果”、“苹果”、“莉”继承Fruit后分文件写。
运行结果:
好吃的水果
好吃的苹果
好吃的莉