GoF Gang of Four 四人组
就Java语言体系来说,GOF的设计模式是Java基础知识和J2EE框架知识之间一座隐性的"桥"。
会Java的人越来越多,但是一直徘徊在语言层次的程序员不在少数,真正掌握Java中接口或抽象类的应用不是很多,大家经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java的接口或抽象类是真正体现Java思想的核心所在,这些你都将在GoF的设计模式里领略到它们变幻无穷的魔力。
GoF的设计模式表面上好象也是一种具体的"技术",而且新的设计模式不断在出现,设计模式自有其自己的发展轨道,而这些好象和J2EE .Net等技术也无关!
实际上,GoF的设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,GoF的设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
这其实在向一个极限挑战:软件需求变幻无穷,计划没有变化快,但是我们还是要寻找出不变的东西,并将它和变化的东西分离开来,这需要非常的智慧和经验。
而GoF的设计模式是在这方面开始探索的一块里程碑。
Java 继承抽象类语法: public class Cat extends AnimalJava 实现接口语法: public class Superman implements IFly
继承中的一些构造函数问题。
如果父类中不写构造函数的话,即存在一个隐式的空参的构造函数。this(); 代表本类的构造函数
super(); 代表父类的构造函数。
在子类的构造函数中的第一行默认的包含super();隐式语句
但如果父类中有其他的非空参的构造函数而没有空参的构造函数,在子类的构造函数中第一行如果没有去调用父类的非空参构造函数,则会在编译时报错。因为子类中所有的构造函数默认都会访问父类中的空参构造函数。
写代码不方便,写个UE,便于查看Jdk的开发源码,也便于自己写小程序
配置电脑调试环境,系统环境变量,JAVA_HOME,PATH,CLASSPATH。javac DOS窗口下有调试参数,证明设置成功!
this(); 和 super();只能出现在子类构造函数的第一行。故二者只能有其一。
子父类中的成员变量不存在继承覆盖。
在本类中,成员变量和局部变量同名用this 区分。
在子父类中,成员变量同名用super区分。
this 代表一个本类对象的引用。
Super 代表一个父类空间
子类不能直接访问父类中的私有成员
子父类中的成员函数同名,成为子类函数覆盖父类函数
函数的两个特性
1, 重载:发生在同一个类中。(函数名相同,形参不同)
2, 覆写:发生在子父类中。子父类函数一模一样(返回类型,函数名,形参都相同)
覆盖的注意事项:
1, 子类方法的权限必须大于或等于父类函数的权限。
2, 静态只能覆盖静态,或被静态覆盖。
final 最终修饰符
abstract修饰符用来修饰类和成员方法可以修饰类,方法,变量。
1, 当修饰类时,该类表示最终类,不能被其他类所继承。
2, 当修饰方法时,该方法不能被覆盖。
3, 当修饰变量时,该变量不能被修改。
public staticfinal double PI =3.1415; 全局常量
1:用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。
2:用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。
abstract 规则:
1:抽象类可以没有抽象方法,但是有抽象方法的类必须定义为抽象类,如果一个子类继承一个抽象类,子类没有实现父类的所有抽象方法,那么子类也要定义为抽象类,否则的话编译会出错的。
2:抽象类没有构造方法,也没有抽象静态方法。但是可以有非抽象的构造方法
3:抽象类不能被实例化,但是可以创建一个引用变量,类型是一个抽象类,并让它引用非抽象类的子类的一个实例
4:不能用final 修饰符修饰
写一个简易计算器:用到java的Scanner 类。
import java.util.Scanner;
public class CountNumber {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("请输入参与运算的第一个数字:");
Double numberA = sc.nextDouble();
System.out.println("请选择您的操作:+、/");
String choice = sc.next();
System.out.println("请输入参与运算的第二个数字:");
Double numberB = sc.nextDouble();
Double result = 0.0;
switch(choice) {
case "+":
result = numberA + numberB;
System.out.println("两个数的和为:" + result);
break;
case "/":
if(numberB == 0) {
System.out.println("除数不能为0");
break;
} else {
result = numberA/numberB;
System.out.println("两个数的除为:" + result);
break;
}
}
} catch(Exception e) {
System.out.println("输入错误!");
}
}
}
程序的要求:可复用,可扩展。
利用面对对象的封装、继承、多态把程序的耦合度降低。这也是JAVA这个高级语言,也是面向对象语言的巨大优势之一。