每天都在进步呀
public class Test{
public static void main(String args[]){
System.out.println(100%3);
System.out.println(100%3.0);
}
}
public权限,是同类内,同包内,包外子类,包外非子类都能访问。
protected,同类内,同包内,包外子类。
default,是同类内,同包内可以。
private,只能是同类内。
Java中允许的继承方式有,单继承A—>B,多层继承A->B->C,不同的类继承一个类A->B,C->B,但是不允许多继承,也就是A->B,A->C.
多态的实现条件
a. 必须在继承体系下
b. 子类重写父类方法
c. 通过父类的引用调用重写的方法。
如下图,通过父类father的引用,调用两个子类重写的方法,会有不同的状态。
public static void main(String[] args) {
father f = new day2_1_1(2003, 8, 28);
father f1 = new sun2(2001, 8, 28);
f.speak();
f1.speak();
}
“==”,如果是两个基本数据类型,比较的是值是否相等。如果是引用类型,比较的是两个对象的地址是否相等。
userId.toLowCase()会重新new一个String对象,在堆上开辟一块空间,和常量池中的"admin"地址是不同的。
如果要比较两个字符串的值是否相等,要用 userId.toLowerCase() .equals(“admin”);
由于hello()是静态方法,在实例化对象之前就已经被加载,属于类对象。只要是使用到了Test类,都会加载静态hello方法,所以test数据中包含Test类的静态初始化数据。但test无法调用类的非静态方法,会有空指针异常。
我们来猜一下,下面代码的执行结果吧
public class Day2_1_3 {
public static void say(){
System.out.println("hello");
}
static{
System.out.println("我是静态代码块");
}
{
System.out.println("我是实例代码块");
}
public void sayYes(){
System.out.println("yes");
}
public static void main(String[] args) {
Day2_1_3 d = null;
System.out.println("我是第几条呢");
Day2_1_3 d1 = new Day2_1_3();
d.say();
d.sayYes();
}
}
调用父类构造方法,有super(),及super(参数列表)两种写法,如下几种情况
this主要用于在一个构造方法中调用另一个构造方法,如下图,在无参构造函数中,调用有参构造函数,可在构造函数开始之间,为对象设置默认值。
注意,super与this不能在同一个构造方法中使用。
class Person {
private String name;
private int age;
// 构造函数1:无参构造函数
public Person() {
this("Unknown", 0); // 调用构造函数2
}
// 构造函数2:有参构造函数
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
抽象类中至少要有一个抽象方法,可以包含普通类能定义的所有类型。如成员属性,构造方法,静态成员变量,普通方法,抽象方法。以下为抽象方法的注意事项。
接口中的访问权限修饰符可以有public和默认两种,默认是可以被包内的其他类或接口访问。
default sayYeah(){
System.out.println("yeah");
}
哒哒