比如,你要一个充气娃娃,这个充气娃娃有一个makeLove方法,你买这个娃娃就是冲着makeLove去的,你不关心它是哪国的娃娃,长得怎样。那么代码就体现为:
interface Chongqiwawa{
public void makeLove(String name);
}
class Person{
Chongqiwawa wawa;
public void setWawa(Chongqiwawa wawa){
thiswawa = wawa;
}
private String name;
public void makeLove(){
//调用wawa的makeLove方法
wawamakeLove(name);
}
现在,你想和wawa那个,就可以这样用了:
main(){
Person you = new Person();
youmakeLove();
}
报错了吧?你怎么能跟虚的wawa那个呢?所以必须要买一个wawa好吧,去逛成人店选购一个wawa这里有日本娃娃,美国娃娃,先看看美国娃娃功能怎么样。
class USAWawa implements Chongqiwawa{
public void makeLove(String name){
Systemoutputprintln(name + "come on! a,a, a");
}
}
好吧,你已经流口水了,一口价成交,然后带回家,迫不及待实践一下,代码体现为:
main(){
Person you = new Person();
Chongqiwawa wawa = new USAWawa();
yousetWawa(wawa);
youmakeLove();
}
这时候你已经可以和娃娃水乳交融了。不久,你发觉厌倦了美国娃娃,想试下日本娃娃,再次来到成人超市,日本娃娃makeLove功能实现如下:
class JapanWawa implements Chongqiwawa{
public void makeLove(String name){
Systemoutputprintln(name + "yemede! a,a, aganbade");
}
}
OK,你直接丢下一堆钞票一句不用找就抱回家了,马上进入主题:
main(){
Person you = new Person();
//获得实际的wawa
Chongqiwawa wawa = new JapanWawa();
yousetWawa(wawa);
youmakeLove();
}
看见了吗,只需改动一行代码,你就实现了娃娃的切换,得到不同的makeLove感受,其他代码都不用改。
OK,停止 YY,回到主题。
这里的Chongqiwawa 对应于 ActionListener,你要实现actionListener接口就相当于实现一个美国娃娃或日本娃娃,然后你addActionListener,就相当于给系统提供一个wawa,系统只要在产生相应事件时调用接口的actionPerformed方法,就相当于你在饥渴时调用makeLove方法,你知道有这个方法即可,不用关心他是哪来的和怎么实现的。
这个代码比较经典,希望能帮到你!
直接声明即可,但并不能实例化。
1、抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。只要把这些东西对应到生活中的概念就明白面向对象的设计本身来源于生活,我们对事物的理解本身都是一样的哲学,理解概念之后怎么写代码就更容易掌握。
2、抽象类是表示部分地实现功能,比如把某些已经确定的功能实现了,而抽象的功能则表示未实现,因为不能确定子类用什么方式实现它或者说把可能性和机会留给子类,比如对于宠物这个抽象类"睡觉“这个方法就是抽象的,因为子类的实现方法各有差异,狗经常待在墙边阴凉处睡觉,而猫则爬到树上睡觉,我们父类中不能把这个”个性“的东西放入”共性“的父类中,“共性”是它们都会睡觉,但具体怎么睡觉则是”个性“,因此只能把它弄成抽象的,把机会留给子类来实现它。抽象类和抽象方法的目的是相同的。当子类实现这些抽象方法后就是叫”实现“,如果这个方法在父类中已经实现了不是抽象的而子类再来实现一次就是“覆盖”或“重写“了父类的方法,这2个都叫实现了”多态“特性。“多态”就是某个“共性”在各个子类中表现出不同的“个性”,但都同时保留着“共性”。
Pet[] pets = new Pet[] { new Dog(), new Cat()};
for(int i = 0;i < petslength; i++) {
pets[i]doSleep(); // 这时每个个体的”个性“表现出现了,就是”多态“。程序是在用它们声明的”共性“ doSleep 来调用这个方法的。这里面就是用"实现”/”覆盖“/"改写”父类方法达到的。覆盖了的方法在调用时会找对应的子类的方法而不是直接用父类提供的,在这里猫会按猫的习惯睡觉,狗会按狗的习惯睡觉。
}
在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。
和抽象语法树相对的是具体语法树(concrete syntaxtree),通常称作分析树(parse tree)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。
你所谓的抽象数据类型到底是什么样子的??类似于泛型的话可以通过两个#实现,比如:
#define Link(node_type) struct node_type##Link{\
struct node_type##Link prev;\
node_type value;\
struct node_type##Link next;\
}
#define Declare_Link(node_type) Link(node_type)
这样你就可以通过:
Declare_Link(int);
声明一个节点值时int类型,节点类型是int_Link类型的新数据类型,如果你定义了链表的 *** 作,那你可以只通过传入int类型,就可以声明并使用任意类型的链表了。
public class Test {
public static void main(String args[]) {
Student student = new Student("a", 1, "b");
studentshowInfo();
}
}
abstract class Person {
protected String name;
Person(String name) {
thisname = name;
}
abstract void showInfo();
}
class Student extends Person {
int grade;
String specialty;
Student(String name, int grade, String specialty) {
super(name);
thisgrade = grade;
thisspecialty = specialty;
}
void showInfo() {
Systemoutprintf("Name: %s, Grade: %d, Specialty: %s\n",
name, grade, specialty);
}
}
abstract class JiSuanMax{
public final static int A = 12;
public final static int B = 13;
public abstract int getMax();
}
class Zi1 extends JiSuanMax{
@Override
public int getMax(){
return Zi1A > Zi1B Zi1A : Zi1B;
}
}
class Zi2 extends JiSuanMax{
@Override
public int getMax(){
return Zi1A > Zi1B Zi1A : Zi1B;
}
}
public class Demo{
public static void main(String[] args){
int max1 = new Zi1()getMax();
Systemoutprintln("最大值为:" + max1);
int max2 = new Zi2()getMax();
Systemoutprintln("最大值为:" + max2);
}
}
以上就是关于编写一个JAVA小程序 要求:体现抽象性,继承性全部的内容,包括:编写一个JAVA小程序 要求:体现抽象性,继承性、C++如何显式声明抽象类、怎样从c++源程序中提取抽象语法树 csdn等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)