JavaSE语法(部分)
继承
继承中变量的访问特点
在子类方法中访问一个变量/成员方法
- 子类局部范围找
- 子类成员范围找
- 父类成员范围找
- 如果没有就报错(不考虑父亲的父亲)
super
this:代表本类对象的引用
super:代表父类存储空间的标示(可以理解为父类对象引用)
继承中构造方法的访问特点
子类中所有的构造方法默认都会访问父类中无参的构造方法
- 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化前,一定会完成父类的数据初始化。
- 每一个子类构造方法的第一条语句,默认都是super()
如果父类中没有无参构造方法,只有有参构造方法
- 通过使用super关键字去显示地调用父类的带参构造方法
- 在父类中自己提供一个无参构造方法
推荐 自己给出无参构造方法
方法重写注意事项
- 私有方法不能被重写(父类私有成员子类是不能继承的)
- 子类方法访问权限不能更低(public>protected>friendly>private)
final
-
final修饰指的是基本类型的数据值不能发生改变
-
final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。
-
final修饰的类不能被继承
static
static修饰的特点
- 被类的所有对象共享
static的访问特点
非静态的成员方法
- 能访问静态的成员变量
- 能访问非静态的成员变量
- 能访问静态的成员方法
- 能访问非静态的成员方法
静态的成员方法
- 能访问静态的成员变量
- 能访问静态的成员方法
总结:静态成员方法只能访问静态成员
多态
多态中成员访问特点
成员变量: 编译看左边,执行看左边
成员方法: 编译看左边,执行看右边
多态的好处和弊端
好处:提高程序的拓展性
具体表现在定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作。
弊端:不能使用子类的特有功能。父类的方法可以重写使用到子类中。
多态存在的三个条件
1、有继承关系
2、子类重写父类方法或者实现关系(接口)
3、父类引用指向子类对象
对于第二点:以下三种类型的方法没有办法表现出多态的特性(因为不能被重写)
1、static方法,因为被static修饰的方法是属于类的,而不是属于实例的。
2、final方法,因为被final修饰的方法无法被子类重写。
3、private方法和protected方法,前者是因为被private修饰的方法对子类不可见,后者是因为尽管被protected修饰的方法可以被子类见到,也可以被子类重写,但是它是无法被外部所引用的,一个不能被外部引用的方法,怎么能谈多态呢。
多态实现的原则
1、向上转型是自动的。Father f = new Childen()是自动的,不需要强转。
2、向下转型要强转。Children c = (Children)new Father(),让父亲知道它要转成具体的哪个子类。
3、父亲引用指向子类对象,子类重写了父亲的方法,调用父亲的方法,实际就是调用子类重写父亲的该方法。也就是成员方法的调用原则:编译看左边,执行看右边。
何时使用向下转型?
1)一定是发生多态: Object obj = new Student();
2)一定是想要去访问(调用)子类对象的特有属性或方法。
Stringstr = ((Student)obj).getSchool();
抽象类
在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
抽象类特点
-
抽象类和抽象方法都必须使用abstract关键字修饰
-
抽象类而中不一定有抽象方法,有抽象方法的类一定是抽象类。
-
抽象类不能实例化。但可以参照多态的方式,通过子类对象实例化,叫做抽象类多态。
-
抽象类的子类
要么重写抽象类中的所有抽象方法
要么本身就是一个抽象类。
抽象类的成员特点
-
成员变量:可以是变量,也可以是常量
-
构造方法:
有构造方法,但是不能实例化
其作用是用于子类访问父类数据的初始化 -
成员方法:
可以有抽象方法:限定子类必须完成某些动作
也可以有非抽象方法,提高代码的复用性。
接口
接口的特点
-
用interface关键字修饰
-
类的实现用implements表示
-
接口不能实例化
但可以参照多态的方式,通过实现类对象实例化 ,叫做接口多态。 -
接口的实现类
要么重写接口中所有抽象方法
要么本身是抽象类
接口的成员特点
-
成员变量
只能是常量
默认修饰符public static final -
构造方法
接口没有构造方法,因为接口主要是对行为进行抽象,是没有具体存在。
一个类如果没有父类,默认继承自Object类。 -
成员方法
只能是抽象方法
默认修饰符:public abstract
类和接口的关系
-
类和类的关系
继承关系,只能单继承,但是可以多层继承 -
类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口 -
接口和接口的关系
继承关系,可以单继承,也可以多继承
抽象类和接口的区别
-
成员区别
抽象类 变量,常量,构造方法,抽象方法,非抽象方法
接口 常量,抽象方法 -
关系区别
类与类 继承,单继承
类与接口 实现,可以单实现,也可以多实现
接口与接口 继承,单继承,多继承 -
设计理念区别
抽象类 对类抽象,包括属性、行为
接口 对行为抽象,主要是行为
抽象类是对事物的抽象,而接口是对行为的抽象
内部类
类名作为形参和返回值
- 方法的形参是类名,其实需要的是该类的对象
- 方法的返回值是类名,其实返回的是该类的对象
抽象类名作为形参和返回值
- 方法的形参是抽象类名,其实需要的是该抽象类的子类对象
- 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象
接口名作为形参和返回值
- 方法的形参是接口名,其实需要的是该接口的实现类对象
- 方法的返回值是接口名,其实返回的是该接口的实现类对象
内部类
内部类访问特点:
-
内部类可以直接访问外部类的成员,包括私有
-
外部类要访问丙部类的成员,必须创建对象
成员内部类
成员内部类外界创建对象使用方式:
- 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
- 范例:Outer.Inner oi = new Outer().new Inner();
局部内部类
是在方法中定义的类,所以外界无法直接使用,需要在方法内部创建对象并使用,该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
匿名内部类
格式:
new 类名或接口名() {
重写方法;
};
- 本质是一个继承了该类或者实现了该接口的子类匿名对象。
Math类常用方法
- public static int abs(int a) 返回参数的绝对值
- public static double ceil(double a) 返回大于或等于参数的最小double值,等于一个整数
- public static double floor(double a) 返回小于或等于参数的最大double值,等于一个整数
- public static int round(float a) 按照四舍五入返回最接近参数的int
- public static int max(int a,int b)返回两个int值中的较大值
- public static int min(int a,int b)返回两个int值中的较小值
- public static double pow(double a,double b)返回a的b次幂的值
- public static double random()返回值为double的正值,[0.0,1.0)
System类常用方法
- public static void exit(int status) 返回当前时间(以毫秒为单位)
- public static long currentTimeMillis() 终止当前运行的Java虚拟机,非零表示异常终止
Object类
Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类
构造方法: public Object()
回想面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法?
因为它们的顶级父类只有无参构造方法
Arrays类
- public static String toString(int[]a) 返回指定数组的内容的字符串表示形式
- public static void sort(int[a]) 按照数字顺序排列指定的数组
包装类
Int转String
- 方法一: String s = "" + (int)number;
- 方法二: String s = String.valueOf(number);
String转Int
-
方法一:
String s = "100";
Integer i = Integer.valueOf(s);
int x = i.intValue();
// String -> Integer -> int -
方法二:
int x = Integer.parseInt(s);
Date类
- public Date() 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
- public Date(Long date) 分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
- public long getTime() 获取的是日期对象从1970年1月1日O0:00:00到现在的毫秒值
- public void setTime(long time) 设置时间,给的是毫秒值
SimpleDateFormat类
-
public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式
-
public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat使用给定的模式和默认的日期格式
-
从Date到String
public final String format(Date date):将日期格式化成日期/时间字符串 -
从String到Date
public Date parse(String source):从给定字符串的开始解析文本以生成日期
Calendar类
Calendar提供了一个类方法getlnstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar.getlnstance();
此时的Calendar对象rightNow是具体格式化的。
常用方法
-
public int get(int field) 返回给定日历字段的值
-
public abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段
-
public final void set(int year,int month,int date) 设置当前日历的年月日
网友评论