静态
静态关键字static 大部分都是公共的public 使用static修饰属性
如
public class Student{
public static String name;
}
这个学生类的name属性就被static修饰,那么static有什么用?
在测试类Test里面创建了Student类对象那么就可以用类名直接调用。
并且被static关键字修饰的属性被赋值了的话,你再创建一个Student类对象它被static修饰的属性也会被影响
如
输出的结果就会是"小白"
static、非private修饰 | 非static、private修饰 | |
属性 | 类属性、类变量 | 实例属性、实例变量 |
方法 | 类方法 | 实例方法 |
调用方式 | 类名.属性 类名.方法() 对象.属性 对象.方法() | 对象.属性 对象.方法() |
归属 | 类 | 单个对象 |
类图
下面这个就是类图
第一层级代表类名,第二层级代表属性,第三层级代表方法
"+"表示public "-"代表private 属性冒号后面的是数据类型
方法冒号后面的是返回值类型
继承
继承关键字extends
将重复代码抽取到父类中防止代码冗余
继承优化后:方便修改代码减少代码量,开发时间短,开发效率快
继承是单向性的一个类可以有多个子类,但是只能有一个父类
先创建一个动物类(父类)
public class Anmina{
}
在创建2个子类Dog狗类Cat猫类我们之前看了要用关键字extends 如下
public class Cat extends Anmina{
}
public class Dog extends Anmina{
}
那么我们使用了继承有什么用?
先看属性
首先我们在父类定义一个name属性在吧name封装
然后猫类和狗类都不变
在测试类中可以直接调用到猫类父类里面的方法
如果我们在猫类里面创建一个在父类里面也有的方法
在父类里面加一个方法
在猫类里面也加一个
那么
我们在测试类中输出结果是“猫在吃”
如果我们想要调用父类的“我在吃”
那么就要用一个新的关键字super 用法super.方法名();
super作用就是调用父类
再次调用eat就可以实现调用父类的“我在吃”也会运行“猫在吃”
这是方法的重写
//共有的方法吃 //父类声明吃方法的时候是无法具体到谁在吃 // 所以父类声明的方法一定是共同性、宽泛
构造方法的继承
先在父类里面创建一个构造方法
再在猫类里面创建一个构造方法
在测试类中创建对象
输出结果是父类构造方法也运行,子类方法也运行
因为我们在子类创建构造方法的时候默认第一行是会输出一个super();
super()会调用父类的构造方法
如果父类中的构造方法里面加一个参数
那么我们子类就会报错因为子类会默认调用一个super();方法自动调用父类构造方法
我们只能在super()括号里面添加参数
//只要父类构造方法不发生重载(保留无参的)子类无需改动 //如果父类没有无参构造方法了 //那么所有子类都必须手动引用父类新的构造方法来确保“先构造父再构造子”这一法则
重载与重写的区别
重载:方法名一致形参不一致
重写∶方法名、参数跟父类方法一致只是方法体内容不一样
我们的测试类创建了几个对象
3个Cat类会自动创建出父类Anmina
Anmina会自动创建出object
什么是object
//object是祖宗级 //1.先得到了0bject对象 //2.先得到Animal //3.在创建cat对象 //总共创建了3个对象 object=>Animal=>cat