接口、抽象类
接口 抽象类 内部类 局部类 匿名内部类
抽样方法 有abstract修饰,没有方法体的方法
抽象类 有abstract修饰,不能创建对象,没有实例化
有抽象方法的类一定是抽象类,有抽象类不一定有抽象方法
接口 :interface全部是抽象方法和常量,但不用abstract修饰,里面的属性只能是常量
实现接口 implements 可以实现多个接口
内部类 类内写的类 局部类 方法中写的类
匿名内部类 隐藏了名称在方法内部的声明的类
/**
*Animal类
*/
public abstract class Animal {
public abstract void speak();
public void run(){
System.out.println("run");
}
}
public class Bird extends Animal implements Fly,Run {
@Override
public void run() {
System.out.println("用脚跑");
}
@Override
public void fly() {
System.out.println("用翅膀飞");
}
@Override
public void speak() {
}
}
public class Cat extends Animal{
public void speak() {
// TODO Auto-generated method stub
System.out.println("喵喵喵");
}
public void run(){
System.out.println("用腿跑");
}
}
public interface Run {
public void run();
}
public class AnimalTest {
public static void main(String[] args) {
Cat cat=new Cat();
cat.speak();
cat.run();
}
}
运行结果:
喵喵喵
用腿跑
public interface Fly {
public void fly();
}
public class Bird extends Animal implements Fly,Run {
@Override
public void run() {
System.out.println("用脚跑");
}
@Override
public void fly() {
System.out.println("用翅膀飞");
}
@Override
public void speak() {
}
}
public class Plane implements Fly,Run{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("用引擎飞");
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("用轮子跑");
}
}
public class InterfaceTest {
public static void main(String[] args) {
Plane plane=new Plane();
Bird bird=new Bird();
plane.fly();
plane.run();
bird.fly();
bird.run();
}
}
运行结果:
用引擎飞
用轮子跑
用翅膀飞
用脚跑
Date类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
Date date=new Date();
System.out.println("毫秒数"+date.getTime());
System.out.println("星期 月份 日期 时 分 秒 时区 年份");
System.out.println(date.toString());
Calendar rightnow=Calendar.getInstance();
System.out.print("毫秒数 "+rightnow.getTimeInMillis());
System.out.print(" 日期 "+rightnow.get(Calendar.DATE));
rightnow.set(Calendar.DATE,100);
System.out.print(" 100天后日期 "+rightnow.get(Calendar.DATE)+" "+rightnow.get(Calendar.MONTH));
System.out.print(" 月份 "+rightnow.get(Calendar.MONTH));
System.out.print(" 今周在这个月中的天数 "+rightnow.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.print(" 年份 "+rightnow.get(Calendar.YEAR)+"\n");
SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String time=format.format(rightnow.getTime());
System.out.println(time);
String s="2015年11月08日 16:01:13";
try {
Date second=format.parse(s);//将日期格式化改为毫秒数
System.out.println("100天后的毫秒数"+second.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
毫秒数1439713258652
星期 月份 日期 时 分 秒 时区 年份
Sun Aug 16 16:20:58 CST 2015
毫秒数 1439713258684 日期 16 100天后日期 8 10 月份 10 今周在这个月中的天数 2 年份 2015
2015年11月08日 16:20:58
100天后的毫秒数1446969673000
内部类
package jie0801;
public class Student {
private int age;
private String name;
public void study(int age,String name){
System.out.println("我今年"+age+"我是"+name+" "+"我正在学习");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public class Pen{
String color;
String name;
public void write(String color,String name){
class Homework{
String object;
public String getObject() {
return object;
}
public void setObject(String object) {
this.object = object;
}
public void homework(){
System.out.println("做作业");
}
}
Homework hw=new Homework();
hw.homework();//局部内部类只能在该方法内实例化以及使用,所有该方法外部不能访问该内部类,
//但是该内部类可以访问当前代码块的常量以及外部类的所有的成员
System.out.println(Student.this.name+"用"+color+"的"+name+"写作业"+" 用的是"+this.name);
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getNamePen() {
return name;
}
public void setNamePen(String namePen) {
this.name = namePen;
}
}
}
import jie0801.Student.Pen;
public class StudentTest {
public static void main(String[] args) {
Student zhangsan=new Student();
zhangsan.setName("张三");
zhangsan.setAge(18);
zhangsan.study(zhangsan.getAge(), zhangsan.getName());
Pen pen=zhangsan.new Pen();
pen.setColor("红色");
pen.setNamePen("钢笔");
pen.write(pen.getColor(),pen.getNamePen());
Ink ink1=new Ink() {
@Override
public String getInk() {
// TODO Auto-generated method stub
return "北京墨水";
}
};//匿名内部类,当只使用一次这个类的对象时候使用。因为这个类没有名字,所以创建一次对象.
Ink ink2=new Ink() {
@Override
public String getInk() {
// TODO Auto-generated method stub
return "北京墨水";
}
};
System.out.println(ink1==ink2);
System.out.println(ink1.equals(ink2));
}
}
运行结果:
我今年18我是张三 我正在学习
做作业
张三用红色的钢笔写作业 用的是钢笔
false
false
面向接口编程
public interface Print {
public void print(Paper paper,Ink ink);
}
public class PrintHP implements Print{
@Override
public void print(Paper paper,Ink ink) {
// TODO Auto-generated method stub
System.out.println("用惠普打印机"+"在"+paper.paper()+"纸张上用"+ink.getInk()+"打印");
}
}
public class PrintOther implements Print{
@Override
public void print(Paper paper,Ink ink) {
// TODO Auto-generated method stub
System.out.println("用其他打印机"+"在"+paper.paper()+"纸张上用"+ink.getInk());
}
}
public interface Paper {
public String paper();
}
public class PaperBeijing implements Paper{
@Override
public String paper() {
// TODO Auto-generated method stub
return "A4";
}
}
public class PaperOther implements Paper{
@Override
public String paper() {
// TODO Auto-generated method stub
return "其他纸张";
}
}
public interface Ink {
public String getInk();
}
public class InkBeijing implements Ink{
@Override
public String getInk() {
// TODO Auto-generated method stub
return "北京墨水";
}
}
public class InkOther implements Ink{
@Override
public String getInk() {
// TODO Auto-generated method stub
return "其他墨水";
}
}
public class PrintTest {
public static void main(String[] args) {
Print print=PrinterFactor.getPrint();
// Print print=new PrintHP();
Ink ink=new InkBeijing();
Paper paper=new PaperBeijing();
print.print(paper, ink);
}
}
运行结果:用惠普打印机在A4纸张上用北京墨水打印
若用工厂模式:
public class PrinterFactor {
public static Print getPrint(){
return new PrintHP();
}
}