写在前面:Java面向对象基础篇,移步Java的面向对象——基础篇_褚睿睿的博客-优快云博客
1.学习目标:学习Java面向对象的static和继承
2.学习内容:
2.1 static
可修饰成员变量和成员方法,一般用于工具类中,表静态,共享
调用方法:变量名或类名都可以调用
tips:1.静态方法中只能访问静态
2.非静态方法可以访问所有
3.静态方法不支持this
2.2 继承
当类与类中间有相同的属性,并且都属于同一个父类,那么就可以采用继承,优化代码。
使用方法:public class 子类 extends 父类{}
成员变量 | public 能 | private 能 |
成员方法 | public 能 | private 不能 |
构造方法 | public 不能 | privat 不能 |
Java继承只支持单个继承,不支持多个继承(可以理解为一个儿子只能有一个爸爸),但支持多层继承(可以理解为儿子可以继承爸爸,爸爸可以继承爷爷,那么爷爷是儿子的间接父类)
Java中的每一个类都直接继承或间接继承object类(Java提前写好的类)
2.3 继承中的访问特点
2.3.1 成员变量
就近原则
当出现重名时:
若想调用子类的成员变量,用this
若想调用父类中的成员变量,用super
2.3.2 成员方法
同成员变量,遵守就近原则
当出现重名时:
若想调用子类的成员变量,用this
若想调用父类中的成员变量,用super
2..3.3 构造方法
子类构造方法的第一行有一个默认的suoer(),访问父类无参构造,进行初始化。
默认先访问父类无参构造,再执行自己的无参构造
子类不可以继承父类的构造方法,但可以用super调用
2.4 方法的重写
子类重写方法的上面要加@override,帮助我们检查
当父类的成员方法无法满足子类的需求时,需要进行方法的重写
2.5 this与super总结
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
this | this.成员变量 访问本类的成员变量 | this.成员方法 访问本类的成员方法 | this() 访问本类的构造方法 |
super | super.成员变量 访问父类的成员变量 | super.成员方法 访问父类的成方法 | super() 访问父类的构造方法 |
3.知识运用
3.1 写一个数组工具类,类中有两个成员方法,一个将字符串数组放进[]中打印,一个求整数数组的平均值,并在测试类中实现。
代码如下
工具类
import java.util.StringJoiner;
public class Arrtools {
//为了不让外界创建它的对象
private Arrtools(){}
public static String ArrPrint(String arr[]){
StringJoiner sj = new StringJoiner(",","[","]");
for (int i = 0; i < arr.length; i++) {
sj.add(arr[i]);
}
String str = sj.toString();
return str;
}
public static int Getave(int arr[]){
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum = sum + arr[i];
}
int ave = sum/arr.length;
return ave;
}
}
测试类
public class test {
public static void main(String[] args) {
String arr1[] = {"a","b","d"};
String result1 = Arrtools.ArrPrint(arr1);
System.out.println(result1);
int arr2[] = {1,6,9,7,5,8};
int result2 = Arrtools.Getave(arr2);
System.out.println(result2);
}
}
3.2 写一个带继承结构的标准的javabe类
经理 成员变量:工号,姓名,工资,工作(管理)
成员方法:吃饭
厨师 成员变量:工号,姓名,工资,工作(炒菜)
成员方法:吃饭
代码如下
父类person
public abstract class person {
//成员变量
private String id;
private String name;
private int income;
private String work;
//空参构造方法
public person() {}
//带参构造方法
public person(String id, String name, int income) {
this.id = id;
this.name = name;
this.income = income;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIncome() {
return income;
}
public void setIncome(int income) {
this.income = income;
}
public String getWork() {
return work;
}
public void setWork(String work) {
this.work = work;
}
@Override
public String toString() {
return "person{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", income=" + income +
", work='" + work + '\'' +
'}';
}
//成员方法
public void eat(){
System.out.println("吃米饭");
}
public void reponsible(){
System.out.println("发奖金");
}
public abstract void responsible();
}
子类cook
public class cook extends person{
//空参构造方法
public cook() {
super();
}
public cook(String id, String name, int income) {
super(id, name, income);
}
@Override
public void responsible(){
System.out.println("领奖金");
}
}
子类manager
public class manager extends person{
//空参构造方法
public manager() {
super();
}
//有参构造方法
public manager(String id, String name, int income) {
super(id, name, income);
}
@Override
public void responsible() {
}
//成员方法
public void work(){
System.out.println("管理");
}
}
测试类
import java.util.ArrayList;
public class test {
public static void main(String[] args) {
ArrayList<person> list = new ArrayList<>();
cook c = new cook();
manager m = new manager();
c.setId("214010311");
c.setName("ccr");
c.setIncome(8000);
c.setWork("炒菜");
m.setId("214010312");
m.setName("zcf");
m.setIncome(9000);
m.setWork("管理");
list.add(c);
list.add(m);
for (int i = 0; i < 2; i++) {
System.out.println(list.get(i));
}
m.eat();
c.eat();
m.reponsible();
c.responsible();
}
}