- static关键字
- 面向对象三特性之继承
- 面向对象三特性之多态
- 抽象类
- 接口
- 权限修饰符
- 枚举类
- 模板设计模式与单例设计模式
- final关键字
- 内部类,
- Object,Date, Math,BigDecimal,包装类,
- 集合Collection(list与set)
- 集合Map
1.1 static关键字(解决对象之间相互冗余的属性和方法)
在前面面向对象的学习中,知道一个类包含成员变量和成员方法,比如定义一个学生类,其具有的成员变量有 姓名,年龄,成员方法有学习等
在一个类中,我们通常用static关键字来区分成员变量和成员方法对于每一个实例对象的归属问题。想上面所述,可能定义的学生类具有像校名、班级名等成员变量,不像姓名年龄这种,这对于同一个学校、同一个班级学生的学生对象来说是一模一样的,像这种对象一模一样的属性或行为我们用static来修饰,该成员变量或成员方法属于该类,并不会像其他成员变量一样在程序运行时会每个对象复制一份到堆内存,而它只会保留在方法区的静态区中,在内存中只有这一份。
1.1.1 static修饰成员变量
格式:static 数据类型 变量名
调用:类名.成员变量名 (因为数据类,不属于对象,因此用类名来调)
public class Demo {
public static void main(String[]args){
Student.schoolName="合肥工业大学";
Student s1 =new Student();
Student s2=new Student();
System.out.println(Student.schoolName);
System.out.println(Student.schoolName);
}
}
class Student{
String name;
int age;
static String schoolName;//static 修饰成员变量
//get/set方法;
//成员方法;
}
1.1.2 static 修饰成员方法
格式:修饰符 static 返回值类型 方法名(参数列表){}
调用:类名调用,类名.方法名
同一类中,静态方法只能使用静态内容(静态成员变量和静态成员方法),静态方法中出线非静态成员变量或者成员方法会报错。
public static void main(String[]args){
Student.setSchoolName("合肥工业大学");
Student s1 = new Student("tom",24);
Student s2 = new Student("jerry",23);
System.out.println(s1.getName()+","+s1.getAge()+","+Student.getSchoolName());
System.out.println(s2.getName()+","+s2.getAge()+","+Student.getSchoolName());
s1.eat();
Student.study();
}
}
class Student{
private String name;
private int age;
private static String schoolName;//static 修饰成员变量
//get/set方法;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static String getSchoolName() {
return schoolName;
}
public static void setSchoolName(String schoolName) {
Student.schoolName = schoolName;
}
//成员方法;
public void eat(){
System.out.println(getName()+" "+getAge()+" "+getSchoolName());
}
public static void study(){
System.out.println(getSchoolName());
}
1.2 继承(解决多个类之间相互冗余的成员变量和方法)
1.2.1 继承概念,格式
概念:在Java语言中,由于多个类中的成员变量和成员方法相同,会造成代码的冗余,我们可以将这些相同属性和行为抽取出来,单独放到一个类中,其他类无需再定义这些成员变量和方法,只需继承那一个类即可,这个类就是父类。
继承格式:关键词 extends
父类:修饰词 class 父类名{
}
子类:修饰词 class 子类名 extends 父类名{
}
继承可以提高代码的复用性,并且使类与类之间产生联系。
public class Demo {
public static void main(String[]args){
Student s=new Student("张三",18,80.5);
s.eat();
s.study();
Teacher t=new Teacher("李老师",35,4000.0);
t.eat();
t.teaching();
}
}
//父类
public class Person {
//要想被子类继承这里就不用private来修饰成员变量和成员方法
String name;
int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void eat(){
System.out.println(name+","+age+","+"在吃饭");
}
}
//子类
public class Teacher extends Person {
private double salary;
public Teacher() {
}
public Teacher(String name, int age, double salary) {
super(name, age);
this.salary = salary;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public void teaching(){
System.out.println(name+","+age+","+"上课工资为:"+salary);
}
}
//子类
public class Student extends Person {
private double score;
public Student() {
}
public Student(String name, int age, double score) {
super(name, age);
this.score = score;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public void study(){
System.out.println(name+","+age+","+"考试分数为"+score);
}
}
1.2.2 继承的内容
并不是父类中所有内容都会继承到子类,父类中的构造方法不会被子类继承(构造方法的方法名要和类名一致),还有父类中被private修饰的成员变量不能直接被子类访问,要通过提供get/set方法来访问。
public class Demo {
public static void main(String[]args){
Student s=new Student("张三",18,80.5);
s.eat();
// s.smokable;父类私有的方法不能被调用
s.study();
Teacher t=new Teacher("李老师",35,4000.0);
t.eat();
//t.smokable;父类私有的方法不能被调用
t.teaching();
}
}
public class Person {
//这里用private来修饰父类成员变量,要想成员变量能够访问这些成员变量,在下面就要提供get/set方法
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public</