测试方法中所有的实例都可以看作是A类型的,除非需要执行子类特有的方法否则都应该写成: A b = new B(); A c = new C(); 因为他们都继承了A,又因为子类中重写了父类的doSomething方法,所以无论父类的doSomething方法是抽象还是非抽象方法,在运行时执行的是子类的方法。 如果把A看做人类,B看作男人,C看作女人,public static void doSomething(A a) 就看作是个可以进入做事情的地方,为什么A和B都能进入了?理解这个就好比是男人女人都是人,允许人类进入的地方,男女都可以进入,如果注明女人或者男人可以进的地方,那只有女人或者男人才可以进入了。男人和女人都要做事情就有了个共同的行为叫doSomething,但是具体男和女做的事情可能又不一样,这样B和C各自可以重新赋予了doSomething不同的执行结果,就产生了多态。何时用抽象合适用具体类,这可不是一二句话说的清楚的,你要真正理解面向对象才能做出判断。
学习面向对象,一定要搞懂抽象。 面向对象最接近我们人类的思维,你的抽象能力就是你对万物万事总结和归纳的能力。 关于抽象可以脱离任何语言来解释。 举个简单的例子,猫老虎豹可以抽象成猫科 猫科,犬科可以抽象成动物 动物植物可以抽象成生物 生物非生物可以抽象成物体 就这样向上追溯所有的事物都可以归根到一类如果不用ABC用下面的这种写法你是否会有些启发呢 你知道动物会发声,但是没有具体的动物你就不知道它发什么声。 所以你把发声在动物的类里抽象成一个方法,而具体动物要有具体的发声。 不知道你明白了没有。 abstract class Animal { public abstract void say(); }class Cat extends Animal { public void say() { System.out.println("喵喵..."); } }class Dog extends Animal { public void say() { System.out.println("汪汪..."); } }
抽象类就是 like a 说明像什么 有abstract的方法的类,必须是abstract类,abstract类里的方法一定要在实现类里实现;概念性的东西 看多了,用多了就好理解了
A b = new B();
A c = new C();
因为他们都继承了A,又因为子类中重写了父类的doSomething方法,所以无论父类的doSomething方法是抽象还是非抽象方法,在运行时执行的是子类的方法。
如果把A看做人类,B看作男人,C看作女人,public static void doSomething(A a) 就看作是个可以进入做事情的地方,为什么A和B都能进入了?理解这个就好比是男人女人都是人,允许人类进入的地方,男女都可以进入,如果注明女人或者男人可以进的地方,那只有女人或者男人才可以进入了。男人和女人都要做事情就有了个共同的行为叫doSomething,但是具体男和女做的事情可能又不一样,这样B和C各自可以重新赋予了doSomething不同的执行结果,就产生了多态。何时用抽象合适用具体类,这可不是一二句话说的清楚的,你要真正理解面向对象才能做出判断。
面向对象最接近我们人类的思维,你的抽象能力就是你对万物万事总结和归纳的能力。
关于抽象可以脱离任何语言来解释。
举个简单的例子,猫老虎豹可以抽象成猫科
猫科,犬科可以抽象成动物
动物植物可以抽象成生物
生物非生物可以抽象成物体
就这样向上追溯所有的事物都可以归根到一类如果不用ABC用下面的这种写法你是否会有些启发呢
你知道动物会发声,但是没有具体的动物你就不知道它发什么声。
所以你把发声在动物的类里抽象成一个方法,而具体动物要有具体的发声。
不知道你明白了没有。
abstract class Animal {
public abstract void say();
}class Cat extends Animal {
public void say() {
System.out.println("喵喵...");
}
}class Dog extends Animal {
public void say() {
System.out.println("汪汪...");
}
}
有abstract的方法的类,必须是abstract类,abstract类里的方法一定要在实现类里实现;概念性的东西
看多了,用多了就好理解了
这句话应该可以概括java中抽象的含义啦。另外:
抽象包含2个方面:过程抽象 和 数据抽象。
抽象的概念在应用于类的属性(数据)和方法时称为数据抽象。抽象的优点:
1.将重点放在问题上
2.确定本质特性和所需的操作
3.有助于回避问题的次要细节大家觉得我从书上总结的这些正确的话,请回帖,然后我就可以结贴啦!谢谢大家!