69期-Java SE-009_面向对象-3-001-002
2020-12-13 06:15
标签:integer `` 完成 xtend 抽象类 byte 技术 面向对象 amp Cashier.java Member.java OrdinaryMember.java People.java SuperMember.java Test.java Test2.java Test3.java 69期-Java SE-009_面向对象-3-001-002 标签:integer `` 完成 xtend 抽象类 byte 技术 面向对象 amp 原文地址:https://www.cnblogs.com/HiJackykun/p/11172174.html### 多态
一个事物有多种表现形态。
- 定义方法时形参为父类,调用方法时传入的参数为子类对象。
- 定义方法时返回值数据类型为父类,调用方法时返回子类对象。
具有继承关系的两个对象可以相互转换,子类转父类即父类引用指向子类对象,可以自动完成,无需强制转换,也叫做向上转型。
父类转子类即子类引用指向父类对象,不能自动完成转换,需要强制转换,也叫做向下转型。
### 抽象方法和抽象类型
如果一个方法只有方法声明而没有具体的方法实现,那么该方法就是抽象方法,在方法定义处使用 abstract 关键字对其进行修饰。
一旦类中定义了一个抽象方法,则该类也必须声明为抽象类,在类定义处添加 abstract 关键字。
```java
public abstract class Member {
public abstract void buyBook();
}
```
抽象类和普通类的区别在于抽象类不能被实例化。
抽象方法和普通方法的区别在于抽象方法没有方法体。
抽象类中可以没有抽象方法。
但是包含了抽象方法的类必须被定义为抽象类。
可以在抽象类中定义非抽象方法,但是在普通类中不能定义抽象方法。
继承了抽象类的子类必须重写父类的抽象方法,以完成具体的方法实现。
如果子类也是抽象类,则不用重写父类的抽象方法。
### Object
Object 类经常被子类重写的方法:
public String toString() 以字符串的形式返回该类的实例化对象信息
public boolean equals(Object obj) 判断两个对象是否相等
public native int hashCode() 返回对象的散列码
### 包装类
Java 中的数据类型从本质上看可以分为两类:8种基本数据类型和引用类型。
包装类是 Java 提供的一组类,专门用来创建8种基本数据类型对应的对象。
包装类一共有8个,保存在java.lang包中。
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
Object:Character、Number、Boolean
Number:Byte、Short、Integer、Long、Float、Double
包装类的拆箱和装箱,拆箱和装箱是包装类的特有名词,装箱是指将基本数据类型转为对应的包装类对象,拆箱是指将包装类对象转为对应的基本数据类型。
public class Cashier {
private Member member;
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
// public void settlement() {
// this.member.buyBook();
// }
public void settlement(Member member) {
member.buyBook();
}
public Member getMember(String name) {
if(name.equals("ordinaryMember")) {
return new OrdinaryMember();
}else {
return new SuperMember();
}
}
}
public abstract class Member {
public abstract void buyBook();
public void test() throws Exception {
hashCode();
getClass();
equals(null);
clone();
toString();
notify();
notifyAll();
wait();
wait(1000L);
}
}
public class OrdinaryMember extends Member{
@Override
public void buyBook() {
System.out.println("普通会员买书打6折");
}
}
public class People {
private int id;
private String name;
private int age;
private char gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
@Override
public String toString() {
return "People [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + "]";
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
People people = (People)obj;
if(this.id == people.getId() && this.name.equals(people.getName()) && this.age == people.getAge() && this.gender == people.getGender()) {
return true;
}
return false;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return id*name.hashCode()*age*gender;
}
}
public class SuperMember extends Member{
@Override
public void buyBook() {
// TODO Auto-generated method stub
}
}
public class Test {
public static void main(String[] args) {
OrdinaryMember ordinaryMember = new OrdinaryMember();
String str = ordinaryMember.toString();
System.out.println(str);
SuperMember superMember = new SuperMember();
System.out.println(superMember);
Cashier cashier = new Cashier();
cashier.settlement(superMember);
// cashier.setMember(superMember);
// cashier.settlement();
OrdinaryMember member = (OrdinaryMember)cashier.getMember("ordinaryMember");
SuperMember member2 = (SuperMember)cashier.getMember("superMember");
Member mem = new OrdinaryMember();
mem = new SuperMember();
// Member mber = new Member();
}
}
public class Test2 {
public static void main(String[] args) {
People people = new People();
People people2 = new People();
// people.equals(people2);
// System.out.println(people2.equals(people));
// people.setId(1);
// people.setName("张三");
// people.setAge(22);
// people.setGender(‘男‘);
// System.out.println(people);
String str = "Hello";
String str2 = "Hello";
System.out.println(str == str2);
System.out.println(str.equals(str2));
String str3 = new String("World");
String str4 = new String("World");
System.out.println(str3 == str4);
System.out.println(str3.equals(str4));
// System.out.println();
}
}
public class Test3 {
public static void main(String[] args) {
People people = new People();
People people2 = new People();
people.setId(1);
people.setName("张三");
people.setAge(22);
people.setGender(‘男‘);
people2.setId(1);
people2.setName("张三");
people2.setAge(22);
people2.setGender(‘男‘);
System.out.println(people.equals(people2));
System.out.println(people.hashCode());
System.out.println(people2.hashCode());
}
}
文章标题:69期-Java SE-009_面向对象-3-001-002
文章链接:http://soscw.com/essay/32772.html