public class Test1 {
public static void main(String[] args){
Object fruit = new Fruit();
Object apple = (Apple)fruit();
}
class Apple extends Fruit{
}
class Fruit{
}
}
这个程序中Object apple = (Apple)fruit();这句话有错,错在哪里??
抱歉,错点提交了
完整程序:
public class Test1 {
public static void main(String[] args){
Object fruit = new Apple();
Object apple = (Apple)fruit;
}
}
class Apple extends Fruit{
}
class Fruit{
}
小兄弟,你这程序问题很大,首先Object fruit = new Fruit();这句代码就是错的,想创建内部类的对象首先要有外部类的实例
Test1 t1=new Test1(); Object fruit=t1.new Fruit(); 然后是这句Object apple = (Apple)fruit();你是想这样吗?Object apple = (Apple)t1.new Fruit();
Object apple = (Apple)fruit();
fruit加括号是一个方法啊,而你并没有定义这个方法,把括号去掉就行了,
改成Object apple = (Apple)fruit;
但是这样编译虽然可以通过,运行会出错,fruit是没法强制转换为Apple对象,
把Object fruit = new Fruit();改成Object fruit = new Apple();就可以了
还有把Apple类和Fruit类放在外面。
完整程序:
public class Test1 {
public static void main(String[] args){
Object fruit = new Fruit();
Object apple = (Apple)fruit();
}
}
class Apple extends Fruit{
}
class Fruit{
}
public class Test1 {
public static void main(String[] args){
Object fruit = new Fruit();
Object apple = (Apple)(new Fruit());
}
static class Apple extends Fruit{
}
static class Fruit{
}
}
你这是没清楚java多态的问题,继承多态;首先就从表面看你这例子,就知道你把概念弄反了,苹果属于水果,并不是水果属于苹果;首先要清楚这一点。
然后再来看为什么代码会有错误提示,你很明显new了一个水果,然后把水果强转成苹果,这根本不能成立,结合我上面说的概念;new出来的就是一个水果对象,你不可能随便臆想成橘子就强转成橘子,想要香蕉就强转成香蕉;把你想法反过来就对了,你new一个苹果对象,这个对象本身就是苹果对象,也可以是水果对象实例,它是属于水果这个类的;
public class Test1 {
public static void main(String[] args){
Fruit apple = new Apple();//当前对象则是Fruit,但是实例却是apple,这就是多态
Apple a = (Apple)apple;//此时你就可以将当前这个Fruit对象转成apple
}
static class Apple extends Fruit{
}
static class Fruit{
}
}
package com.edu_01;
/**
* 1.外部类要访问内部类应该实例化,这里main方法访问内部类,内部类应该应该用static修饰
* 2.多态--父类引用指向子类对象,Object fruit = new Apple(),这样才算是父类引用指向子类对象
* 3.Apple apple = (Apple)fruit,fruit本质就是苹果,所以才可以强转为Apple
*/
public class Test1 {
public static void main(String[] args){
Object fruit = new Apple();
Apple apple = (Apple)fruit;
//apple.run();
}
static class Apple extends Fruit{
// public void run() {
// System.out.println("asvd");
// }
}
static class Fruit{
}
}
Fruit是Apple的父类,子类可以直接转换为父类,但父类如果要强制转换为子类必须先由子类转换为父类,然后才能转换回去...因为子类中有父类的全部
属性,但父类中没有子类的全部属性,因此父类不能直接强制转换为子类。所以必须先创建Apple的实例并转换为Fruit类,然后Fruit类才能强制转换为
Apple类