活动地址:CSDN21天学习挑战赛

public class User {
static String name; //静态成员变量
int age; //实例成员变量
}

public class HelloWorld {
public static void main(String[] args) {
User user = new User();
user.age = 30;
user.name = "张老师"; //不推荐 对象.实例成员变量
User.name = "李老师"; //静态变量可以直接被 类名.静态成员变量 使用 推荐此方法
// User.age = 35; //报错的
User u1 = new User();
u1.name = "张老师";
User u2 = new User();
u2.name = "李老师";
System.out.println(u1.name);
System.out.println(u2.name); //static修饰 内存中只加载一次,只有一份 所以u1和u2的值是相同的
}
}
静态成员变量:表示在线人数等需要被类的所有对象共享信息时
实例成员变量:属于每个对象,每个对象信息不同时
static注意事项:
静态方法只能访问静态成员,不可以直接访问实例成员
实例方法可以访问静态成员,也可以访问实例成员
静态方法中不可以出现this关键字
定义:用{}括起来称为代码块
static{}
{}
- 可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。
/**
* 定义一个单例类
*/
public class Single {
//定义一个静态变量存储一个对象:属于类,与类一次加载一次
public static Single single = new Single();
//单例必须有私有构造器
private Single(){
System.out.println("Single");
}
}
需要改对象时,才创建一个对象(延迟加载对象)
/**
* 定义一个单例类
*/
class SingleInstance {
//定义一个静态变量存储一个对象:属于类,与类一次加载一次
public static SingleInstance single; //默认值null
//单例必须有私有构造器
private SingleInstance(){
System.out.println("Single");
}
//必须有一个返回单例对象的方法
public static SingleInstance getSingle() {
return single;
}
}
用extend关键字,让一个类和另一个类建立成父子关系
Object称之为父类(基类或超类),继承Object的称之为子类(派生类)
作用:当子类继承父类后,可以直接使用父类的公共属性和方法
好处:
可以提供代码复用性
继承格式:子类 extend 父类
public class SingleInstance extends Object{
public static void main(String[] args) {
System.out.println("SingleInstance是子类,Object是父类");
}
}
子类相同特征(属性、方法)在父类中定义,子类特有属性和方法定义在自己的类中

public class Person {
private String name;
private int age;
public void eat(){
System.out.println("人天生就会吃");
}
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Teacher extends Person{
private String ClassName;
public void teacherCourse(){
System.out.println("老师必须要会授课");
}
public String getClassName() {
return ClassName;
}
public void setClassName(String className) {
ClassName = className;
}
@Override
public String toString() {
return "Teacher{" +
"ClassName='" + ClassName + '\'' +
'}';
}
}
public class User {
public static void main(String[] args) {
Teacher tc = new Teacher();
tc.setName("张老师");
tc.setAge(35);
tc.setClassName("数学课");
System.out.println(tc.getName());
System.out.println(tc.getAge());
System.out.println(tc.getClassName());
tc.teacherCourse();
tc.eat();
}
}
- 子类可以继承父类的属性和方法,不能继承父类构造器
- Java是单继承模式:一个子类只能继承一个父类
- Java不支持多继承,支持多层继承,A继承B,C继承B
- Java所有类都是Object的子类
- 子类可以继承父类私有成员,但是不能直接访问
先子类局范围找
然后子类成员范围找
然后父类成员范围找,如果父类没有找到则报错
用super关键字,指定访问父类成员
格式:super.父类成员变量/方法
在继承中,子父类出现同命名方法声明,称子类此方法重写
子类需要父类功能,父类该功能不能完全满足子类需求时
@Override是放在方法重写上面作为校验
加上该注解,编译阶段有错误会提示
建议重写方法都加是@Override
重写方法名称、形参列表必须与被重写方法名称、形参列表一致
私有方法不能被重写
子类重写父类时,访问权限必须大于或者等于父类(缺省子类不能重写父类静态方法,如重写会报错
子类所有构造器默认都会优先访问父类中无参构造器,在访问自己
子类初始化时,可能会用到父类的数据,如父类没有初始化完成,子类无法使用父类数据
子类构造器第一句,super()默认
初始化继承自父类数据
子类构造器用super(),手动调用父类带参构造器 ----子类默认调用父类无参构造器
- this 本类对象引用
- super 父类存储空间标识
子类通过this() 去调用本类其它构造器,本类其它构造器会通过super()手动调用父类构造器,最终调用父类构造器
this()、super()必须放在构造器第一行,二者不能同时出现在同一个构造器中