个人学习:
java 抽象类 如同现实中 对某一类事i物 抽取 他们所共同的属性和行为
对于 行为接口 指类对外某一行为 的反应 ;
java 的装箱与拆箱
/*****
*抽象父类
*/
public abstract class People{
public final static int TEADHER=0;
public final static int STUDENT=1;
public abstract int getType();
public abstract void show();
public abstract String getName();
}
public class Student extends People{
private String name="student";
/**
* 利用构造方法多态性 数量与 参数类型不同 设置属性,对于 不重要属性 可设默认值
* 也可类似 javaBean
*/
public Student(String name){
this.name=name;
}
@Override
public int getType() {
return People.STUDENT;
}
@Override
public String getName() {
return name;
}
public String getStudentOther(){
return "studentOther";
}
@Override
public void show() {
System.out.println("我是学生"+name);
}
}
public class Teacher extends People{
private String name="teacher";
public Teacher(String name){
this.name=name;
}
@Override
public int getType() {
return People.TEADHER;
}
@Override
public String getName() {
return name;
}
public String getTeacherOther(){
return "teacherOther";
}
@Override
public void show() {
System.out.println("我是老师"+name);
}
}
public static void main(String[] agrs){
People p=new Student("a");
//无需关注其显示细节 ,由类自身表现
p.show();
p=new Teacher("b");
p.show();
/****
* 装箱 拆箱方式
*/
//在某个 生成People子类的 类方法中
Student student=new Student("a");
People p2=(People)student;
Teacher teacher=new Teacher("a");
People p3=(People)student;
//对于 p2,p3 都可方便的以都为People,反射机制 时 通过 配置文件 加入 新增 子类型
//传递或 存储时 适合 对于 某些 处理类 只需 people的公共属性 行为 时
//但是 对于一些类 必须获取 people所对应 子类 特有属性时
//此时 可通过 拆箱方式 (强制类型转换) 当然 得知道其 原来 是哪个子类的实例
String s=p2.getType()==People.TEADHER?((Teacher)p2).getTeacherOther():((Student)p2).getStudentOther();
System.out.println(s);
/**
* 不好之处
* 拆箱时 必须明确 自 原来是哪个子类 的 实例引用,否则 会有异常抛出
* 故 通过 getType()判断 ,作为 使用 时 的 约定
* 但随着类型的 增多 判断增加。
*
*
*/
}
/****程序结果***/
我是学生a
我是老师b
studentOther
java 抽象类 如同现实中 对某一类事i物 抽取 他们所共同的属性和行为
对于 行为接口 指类对外某一行为 的反应 ;
java 的装箱与拆箱
/*****
*抽象父类
*/
public abstract class People{
public final static int TEADHER=0;
public final static int STUDENT=1;
public abstract int getType();
public abstract void show();
public abstract String getName();
}
public class Student extends People{
private String name="student";
/**
* 利用构造方法多态性 数量与 参数类型不同 设置属性,对于 不重要属性 可设默认值
* 也可类似 javaBean
*/
public Student(String name){
this.name=name;
}
@Override
public int getType() {
return People.STUDENT;
}
@Override
public String getName() {
return name;
}
public String getStudentOther(){
return "studentOther";
}
@Override
public void show() {
System.out.println("我是学生"+name);
}
}
public class Teacher extends People{
private String name="teacher";
public Teacher(String name){
this.name=name;
}
@Override
public int getType() {
return People.TEADHER;
}
@Override
public String getName() {
return name;
}
public String getTeacherOther(){
return "teacherOther";
}
@Override
public void show() {
System.out.println("我是老师"+name);
}
}
public static void main(String[] agrs){
People p=new Student("a");
//无需关注其显示细节 ,由类自身表现
p.show();
p=new Teacher("b");
p.show();
/****
* 装箱 拆箱方式
*/
//在某个 生成People子类的 类方法中
Student student=new Student("a");
People p2=(People)student;
Teacher teacher=new Teacher("a");
People p3=(People)student;
//对于 p2,p3 都可方便的以都为People,反射机制 时 通过 配置文件 加入 新增 子类型
//传递或 存储时 适合 对于 某些 处理类 只需 people的公共属性 行为 时
//但是 对于一些类 必须获取 people所对应 子类 特有属性时
//此时 可通过 拆箱方式 (强制类型转换) 当然 得知道其 原来 是哪个子类的实例
String s=p2.getType()==People.TEADHER?((Teacher)p2).getTeacherOther():((Student)p2).getStudentOther();
System.out.println(s);
/**
* 不好之处
* 拆箱时 必须明确 自 原来是哪个子类 的 实例引用,否则 会有异常抛出
* 故 通过 getType()判断 ,作为 使用 时 的 约定
* 但随着类型的 增多 判断增加。
*
*
*/
}
/****程序结果***/
我是学生a
我是老师b
studentOther