package object;
/*
* 引言:
* 我们知道我们可以通过创建子父类对象调用子父类方法
* 子->子 父->父
* 同样的我们也可以通过super关键字在子类对象中调用父类方法
* 子-父
* 那么现在我们讨论在父类中应该怎样调用子类的重写方法呢(一定是继承哦)
* 父->子
* 得出方法
* 1、向上转型
* 父->子(重写)
*
*
* 我们知道了使用向上转型可以从父类对象中调用子类的重写的方法,那么我们可以调用子类的特有方法吗?
* ~向下转型(强转)
* 2、向下转型
* 父->子(特定)
*/
public class UpDownChangeAndInstanceof {
public static void main(String[] args) {
//1、向上转型(父类的引用指向子类对象)
Testequals Father=new Testequals02();//父类对象new到子类去
Father.A();//我是子类重写方法
Father.number=1;
System.out.println(new Testequals02().number );
//66只能调用重写方法,属性不能掉
//2、向下转型
//instanceof是java中的一个保留关键字
// 他的左边是对象,右边是类,返回值是boolean类型
// 他的具体作用是测试左边对象是否是右边类,或者该类的子类创建的实例对象
// PS:必须存在继承关系,主要应用与强制转换
Testequals Father02=new Testequals();
Father02=(Testequals02)new Testequals02();
if(Father02 instanceof Testequals02 )
{
//父->子
Testequals02 F=(Testequals02) Father02;
F.A();//我是子类重写方法
F.B();//我是子类特有方法
}
/*
* 有了对象的多态性后,内存是实际上加载了子类所特有的属性与方法,但是由于变量声明为父类类型,导致编译时:只能调用父类中声明的属性与方法,子类特有方法不能调用。
*/
//我们一定要注意我们在哪个类定义了对象
//这个对象只能调用自己类所具有的方法
//所以我们才创建了一个子类的F对象来承接强制转型的父类
//功能:1、向上转型可以调用重写方法,可以减同时使用重写方法的代码量
// 2、向下转型可以在父类调用子类所有的属性和方法
}
}
class Testequals //父类
{
int number=66;
String word="gaogao";
float score=100.1f;
public void A()
{
System.out.println("我是父类方法");
}
}
class Testequals02 extends Testequals//子类
{
int number=66;
String word="gaogao";
float score=100.1f;
public void A()
{
System.out.println("我是子类重写方法");
}
public void B()
{
System.out.println("我是子类特有方法");
}
}
12-07
1081
09-04
10-23
172
10-25
349
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交