回顾:
1.重写(override): 
    1)父子类中,方法签名相同,方法体不同
    2)重写方法被调用时,看对象的类型
    3)两同两小一大:
        3.1)方法名同,参数列表同
	3.2)子类返回值类型小于等于父类
	       3.2.1)void时,必须相同
	       3.2.2)基本类型时,必须相同
	       3.2.3)引用类型时,子类小于等于父类(父类大,子类小)
	      子类抛出的异常小于等于父类-----后期说
	3.3)子类的访问权限大于或等于父类
2.重写与重载的区别
   1)重写(override):父子类,方法名同,参数列表同
                              “运行期”绑定,看对象的类型调用方法
   2)重载(overload):一个类,方法名同,参数列表不同
                              "编译期"绑定,看引用的类型绑定方法
3.package(声明包),import(声明类/引入类)
4.访问控制修饰符
   public,protected,默认,private
   对于类,只能用public或默认的
          内部类,如上4种都可以
   对于类的成员,如上4种都可以
5.static:静态的
   1)修饰成员变量:静态变量(类变量)
          类,方法区,一份,类名点访问
	  何时用: 当所有对象的数据都一样时使用
   2)修饰方法:静态方法(类方法)
          没有隐式的this传递,不能直接访问实例成员
	  何时用:方法的操作仅与参数有关,而与对象无关
   3)块:静态块
           类被加载期间自动执行,一次
	   何时用:初始化静态资源(图片、音频、视频......)
6.final:最终的
   1)修饰变量:变量不能被改变
   2)修饰方法:方法不能被重写
   3)修饰类:类不能被继承
7.内部类:
   1)类中套类,外面叫外部类,里面叫内部类
   2)内部类只服务于外部类,对外不具备可见性
   3)内部类对象在外部类中创建
   4)内部类可以直接访问外部类的成员(包括私有)
       内部类中有一个隐式的引用指向了创建它的外部类对象:
          Mama.this.成员变量名
8.匿名内部类:
   Aoo o = new Aoo(); //创建Aoo的对象
   //1.创建了Aoo的一个子类,没有名字
   //2.为该子类创建了一个对象,名为o
   //3.大括号中的Aoo子类的类体
   Aoo o = new Aoo(){ 
   };
package a;
class Aoo{
}
package b;
class Aoo{
}
package c;
class Test{
   main(){
      a.Aoo o = new a.Aoo();
      b.Aoo o1 = new b.Aoo();
   }
}
正课:
1.static final常量:
   1)必须声明同时初始化,不能修改,类名点来访问
   2)常量名建议所有字母都大写
   3)编译器编译时会直接替换为具体的值---效率高
2.抽象方法
   1)由abstract修饰
   2)只有方法的定义,没有方法的实现(连大括号都没有)
3.抽象类:
   1)由abstract修饰
   2)包含抽象方法的类必须是抽象类
      不包含抽象方法的类也可以声明为抽象类-----我愿意
   3)抽象类不能被实例化
   4)抽象类是需要被继承的,子类:
      4.1)重写所有的抽象方法----建议
      4.2)声明为抽象类----不建议
   5)抽象类的意义:
      5.1)封装所有子类共有的数据和行为,实现代码重用
      5.2)为所有子类提供了一种公共的类型(向上造型)
      5.3)包含抽象方法,为所有子类提供一个统一的入口
4.接口:
   1)是一个标准、规范-----制定方
      遵守了这个标准,就能干某件事-----后期再理解
   2)由interface定义
   3)只能包含常量和抽象方法
   4)接口不能被实例化
   5)接口是需要被实现(implements)的,实现类:
          必须重写接口中的所有抽象方法
   6)一个类可以实现多个接口,用逗号分隔
      若既继承又实现时,必须先继承,后实现
   7)接口之间可以继承
      7.1)类和接口之间为实现(implements)
      7.2)接口和接口之间为继承(extends)
      7.3)类和类之间为继承(extends)
interface UnionPay{  //银联接口
   void 存钱();
   void 取钱();
   void 查余额();
}
interface ABC extends UnionPay{  //农行接口
   void 支付电话费();
}
interface ICBC extends UnionPay{  //工行接口
   void 在线支付();
}
class ABCImpl impelments ABC{  //农行卡
   public void 存钱(){}
   public void 取钱(){}
   public void 查余额(){}
   public void 支付电话费(){}
}
class ICBCImpl implements ICBC{  //工行卡
   public void 存钱(){}
   public void 取钱(){}
   public void 查余额(){}
   public void 在线支付(){}
}
UnionPayTest
Inter1 o1 = new Inter1();  //编译错误
Inter1 o1; //正确
Aoo    o1 = new Aoo();
Inter2 o2 = new Aoo();   //向上造型
Inter1 o3 = new Aoo();   //向上造型
interface Inter1{
   void a();
   void b();
}
interface Inter2 extends Inter1{
   void c();
}
class Aoo implements Inter2{
   public void c(){}
   public void a(){}
   public void b(){}
}
interface Inter1{
   void a();
}
interface Inter2{
   void b();
}
abstract class Aoo{
   abstract void c();
}
class Boo extends Aoo implements Inter1,Inter2{
   public void a(){}
   public void b(){}
   void c(){}
}
interface Inter1{
   void a();
   void b();
}
class Aoo implements Inter1{
   public void a(){}
   public void b(){}
}
interface Inter1{
   public static final int NUM=2;
   public abstract void show();
   void say(); //默认public abstract
   double PI=3.14159; //默认public static final
}
生活中的接口:
1.电脑厂商做USB口------------------制定标准、规范
   U盘、摄像头、充电线...----------遵守标准、规范
2.国家对商品房------------------------制定标准、规范
   国家对家具、家电------------------制定标准、规范
   开发商、家具厂商------------------遵守标准、规范
3.银行-------------------------------------制定标准、规范
   银行卡----------------------------------遵守标准、规范
农行-----存钱、取钱、转帐、查余额、支付电话费
农行卡-----具备如上5个功能
工行-----存钱、取钱、转帐、查余额、在线支付
工行卡-----具备如上5个功能
abstract class 人{
    abstract void study();
}
class 程序员 extends 人{
   void study(){
   }
}
class 医生 extends 人{
   void study(){
   }
}
class 警察 extends 人{
   void study(){
   }
}
abstract class Shape{   //抽象类----不完整
   double c;  //周长
   abstract double area();  //抽象方法----不完整
}
class Circle extends Shape{
   double area(){  //重写抽象方法---变不完整为完整
      return 0.0796*c*c;
   }
}
class Square extends Shape{
   double area(){  //重写抽象方法---变不完整为完整
      return 0.0625*c*c;
   }
}
new Tetromino();   //编译错误
new Tetromino(); //永远不需要的
new T();
new J();
new O();
abstract class Tetromino{
   Cell[] cells;
   void drop(){}
   void moveLeft(){}
   void moveRight(){}
   void print(){}
}
class T extends Tetromino{
}
class J extends Tetromino{
}
class O extends Tetromino{
}
给我一组图形,找到这一组图形中的最大面积:
Shape[] shapes = new Shape[6];
shapes[0] = new Circle(1);
shapes[1] = new Circle(2);
shapes[2] = new Square(1);
shapes[3] = new Square(2);
shapes[4] = new Six(1);
shapes[5] = new Six(2);
double max = shapes[0].area(); //1.Shape类中包含area(),保证能点出来 2.此处调用的中子类的area()方法,因重写后调谁看对象的类型
for(int i=1;i<shapes.length;i++){
   double area = shapes[i].area();
   if(area>max){
      max = area;
   }
}
System.out.println("max="+max);
abstract class Shape{   //抽象类----不完整
   double c;  //周长
   abstract double area();  //抽象方法----不完整
}
class Circle extends Shape{
   double area(){  //重写抽象方法---变不完整为完整
      return 0.0796*c*c;
   }
}
class Square extends Shape{
   double area(){  //重写抽象方法---变不完整为完整
      return 0.0625*c*c;
   }
}
new Shape();  //编译错误
Shape s;  //正确
abstract class Shape{  //抽象类----不完整
   double c;
   abstract double area();  //抽象方法----不完整
}
class Square extends Shape{
   double area(){ //重写----变不完整为完整
      return 0.0625*c*c;
   }
}
class Circle extends Shape{
   double area(){
      return 0.0796*c*c;
   }
}
原文:http://www.cnblogs.com/xiaziteng/p/4731402.html