向上转型与向下转型-创新互联
Java转型用于继承或者在接口上,实现业务场景使用。转型分为向上转型和向下转型。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、网站空间、营销软件、网站建设、张家界网站维护、网站推广。向上转型为自动转型
向下转型需要强制转型
向上转型向上转型是从一个较专用类型(子类),向通用类型转换(父类),所以总是安全的。因为向上的父类存放的方法都是公共方法。
父类引用子类对象
Cate obj = new Say();
向上转型后,obj可以调用子类重写父类的方法,如果子类没有重写父类的方法,才会去调用父类的公共方法,这就是动态绑定关系。但是向上转型后不能调用子类的特有方法。
向上转型可以详细看这篇
父类引用子类对象
向下转型将原本属于父类的对象强制转换为子类,就叫做向下转型。向下转型并不是每个对象都可以的,只有这个对象原本属于子类向上转型后的成为父类的对象,才能重新向下转回变成子类。
向下转型可能会导致丢失一些属性信息,所以不推荐向下转型。除非是业务需要。
语法
// 子类类型 引用名 = (子类类型)父类引用名
Say Gt = (Say)obj;
通过向下转型后,子类对象可以调用子类的所有属性及方法。
Cate obj = new Say(); // 父类引用子类对象,属于向上转型
// 从向上转型强制转为向下
Say Gt = (Say)obj; // 只有向下转型了,才能使用子类的所有属性及方法
System.out.println(Gt.Name); // 输出子类的Name;
Gt.Dt(); // 调用子类的方法
class Cate{
String Name = "zhowHua";
public void Met(){
System.out.println("这是父类");
}
}
class Say extends Cate{
String Name = "JZ";
public void Met(){
System.out.println("子类重写父类的方法");
}
public void Dt(){
System.out.println("子类特有的方法");
}
}
判断对象是否属于子类instanceof关键字
instanceof会返回一个对象是否属于某个子类的布尔值。如果是则返回true,不是返回false。
我们通过instanceof逻辑判断后,再对该对象进行强制转换,保证安全性。
PRO S = new Stud("居正", 27, 95.5);
// 通过instanceof进行判断S是否Stud的子类对象
if(S instanceof Stud){
Stud Dt = (Stud)S;
}
通过数组对象遍历向上转型可以将所有对象统一放进数组对象里,进行遍历
// 创建数组对象
PRO[] arr = new PRO[6];
arr[0] = new Stud("居正", 27, 95.5);
arr[1] = new Tech("陈刚", 35, 10000);
arr[2] = new Stud("小明", 25, 76.5);
arr[3] = new Tech("李莉", 43, 15000);
for (int i = 0; i< arr.length; i++) {
arr[i].res(); // 遍历数组调用当前数组元素的方法
}
通过数组遍历批量完成向下转型for (int a = 0; a< arr.length; a++) {
if(arr[a] instanceof Stud){ // 通过instanceof对当前元素进行判断是否为某个子类
Stud aa = (Stud)arr[a]; // 判断正确则进行向下转换。
aa.Dt();
}else if(arr[a] instanceof Tech){
Tech bb = (Tech)arr[a];
bb.Dt();
}else{
System.out.println("异常");
}
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享文章:向上转型与向下转型-创新互联
转载来于:http://scyanting.com/article/csgehi.html