final关键字修饰成员变量:其值不能改变,必须进行初始化;
final修饰方法:能被继承,不能被重写(保护父类特殊数据)
final修饰类:类不能被继承
static静态变量:在所有对象里只存在一份;不依赖于对象的加载而依赖于类的加载(静态变量是属于类的);
static方法:类方法:静态方法不能被重写
static final:静态常量:唯一的不可变的只存在一份的数据
继承extends
访问修饰符
修饰符 | 当前类 | 同 包 | (不同包的)子 类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × 不同包中只能通过子类访问 |
default | √ | √ | × 子类在另一个包里,无法访问default | × |
private | √ | ×只有本类可访问 | × | × |
package com.test;
class fruit
{
static String color = "black";
String size = "big";
static String getColor()
{
return color;
}
String getSize()
{
return size;
}
}
public class apple extends fruit{
static String color="white";
String size="small";
static String getColor()
{
return color;
}
String getSize()
{
return size;
}
public static void main(String[] args)
{
fruit f=new apple();
System.out.println(f.getColor());
System.out.println(f.getSize());
}
}
运行结果:
black-------------------->f 在编译期为fruit类型,在运行期为apple类型:在apple继承fruit时,类方法(不能重写)没有被覆盖
small
Process finished with exit code 0
若apple f=new apple(); 则white small
方法重载overload---》根据参数的类型来执行方法、哪个参数列表相同就执行哪个、执行最兼容的那个
重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
byte、short、int、long、float、double、char、boolean
引用类型
- 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
- 对象、数组都是引用数据类型。
- 所有引用类型的默认值都是null。
- 一个引用变量可以用来引用任何与之兼容的类型。
- 例子:Site site = new Site("Runoob")。
重写override的返回类型:返回类型为基本类型时必须一样;返回类型时引用类型时,可以相同也可以派生自被重写方法的返回类型
abstract抽象:
抽象类:永远不能实例化、 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
继承了抽象类就必须实现该抽象类的抽象方法、子类没有实现父类的抽象方法就必须为抽象类
package com.test;
abstract class bike
{
public String name="abstract var";
public String getName()
{
return name;
}
//abstract public String getab();
}
public class abs extends bike{
/* public String getab()
{
System.out.println("realize");
return getName();
}*/
public static void main(String[] args)
{
abs a=new abs();
System.out.println(a.getName());
}
}
枚举类 enum colors{green,yellow}
反射机制
泛型 ArrayList<String> a1=new ArrayList<String>();a1.add(s);String s=a1.get(0);------->集合默认的元素类型为Object--》String