## 面向对象
一个类即使什么都不写,它也会存在一个方法显示地定义构造器
使用new关键字,本质上是在调用构造器
一旦定义了有参构造,无参就必须显示定义
super注意点:
1、super是调用父类构造方法,必须在构造方法的第一个
2、super必须只能出现在子类的方法或者构造方法中
3、super和this不能同时调用构造方法
和this比较:
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只能在继承条件才可以使用
构造方法:
this():本类的构造方法
super():父类的构造
重写:需要有继承关系,子类重写父类
1、方法吗必须相同
2、参数列表必须相同
3、修饰符范围可以扩大,但是不能缩小
4、抛出的异常范围可以被缩小,但不能扩大
重写,子类的方法和父类必须要一致,但方法体不同
为什么要重写:
1、父类的功能,子类不一定需要,或者不一定满足
多态:
1、多态是方法的多态,属性没有多态
2、存在条件:继承关系,子类重写父类方法, 父类引用指向子类对象 Father f1=new son();
转换:
1、父类引用指向子类的对象
2、把子类转换为父类,向上转型,可能会丢失子类的方法
3、把父类转换为子类,向下转型,要强制转换
4、好处就是方便方法的调用,减少重复代码
抽象类的所有方法,其子类必须要实现
抽象类中可以写普通的方法
抽象方法必须在抽象类中
抽象方法:只有方法名字,没有方法的实现
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有
接口:只有规范,自己无法写方法
ctrl+Alt+t 捕获异常
//自定义的异常 public class exception extends Exception{ }
常用类
包装类
基本数据类型--》引用数据类型--》继承关系
byte ->Byte 先继承自Number再继承自Object
short ->Short 先继承自Number再继承自Object
int-> Integer 先继承自Number再继承自Object
long->Long 先继承自Number再继承自Object
float->Float 先继承自Number再继承自Object
double->Double 先继承自Number再继承自Object
char->Character 继承自 Object
boolean->Boolean 继承自Object
时间处理类
import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { System.out.println("输入你想要查看的日期:---格式例如:2021-5-12"); Scanner sc = new Scanner(System.in); String str = sc.next(); //String->Calendar Date valueOf = java.sql.Date.valueOf(str); Calendar cal = new GregorianCalendar(); cal.setTime(valueOf); // System.out.println(cal); System.out.println("日\t一\t二\t三\t四\t五\t六\t"); //引入一个计数的变量 int count =0; //求出这个月中的最大天数 int maxDay = cal.getActualMaximum(Calendar.DATE); //获取现在是哪天 int nowDay = cal.get(Calendar.DATE); //将当前日期变成本月的第一天 cal.set(Calendar.DATE,1); //获取这个第一天是一周中的第几天 int num =cal.get(Calendar.DAY_OF_WEEK); //\t的个数:num-1 for (int i = 1; i < num - 1; i++) { System.out.print("\t"); } count+=(num-1); for (int i = 1; i < maxDay; i++) { if(i!=nowDay){ System.out.print(i+"\t"); }else{ System.out.print(i+"*\t"); } count++; if(count%7==0){ System.out.println( ); } } } }
结果