java基础day14---static关键字-----继承
day14
1.为什么使用static关键字修饰属性
/* 编写学生类,属性:名字,现住址(北京) */ class Student{ //构造方法 public Student(){ } public Student(String name){ this.name=name; } //属性 String name; String address="北京"; } //编写学生测试类 class StudentTest{ public static void main(String[] args){ //创建对象 Student s=new Student(); Student s2=new Student("张三"); System.out.println(Student.address);//北京 Student s=new Student(); System.out.println(s.name);//null System.out.println(s.address);//北京 s=null;//变为空值,对象变为垃圾 //System.out.println(s.name);//出现运行错误,不能访问对象中的实例变量 System.out.println(s.address); } }
//发现问题:
---多个对象中有相同值得属性,如:address="北京";
-----能否将相值得属性,在内存中只开辟一块空间,
并且所有对象都可以访问?---能
解决办法:
--将相同值得属性,存放在一个共享区(方法区)中,此时
多个对象都可以访问。
堆--栈---共享区---堆--栈
---好处:节省空间
---static String address="北京";///称为静态属性也叫做类的变量
---在方法区(共享区)中存储,并且所有对象都可以访问
---与类同生死,也就是说类在static修饰的属性就存在
---可以使用类名.属性名称;也可以使用引用名称.属性名称
---注意:当引用名称的值为null时,也可以访问静态属性,
不会出现空指针异常
---类优先于对象,也就是说类的生命周期比较长
2.static关键字修饰符方法
---称为静态方法也叫做类的方法
---与类同生死,也就是说类在static修饰的属性就存在
---可以使用类名。方法名称([参数列表]);
也可以使用引用名称.方法名称([参数列表]);
class Student{ //称为静态方法也叫做类的方法 public static void print(){ System.out.println("执行了println方法"); //System.out.println(name);//静态方法中只能访问静态属性,静态方法 } //称为非静态方法也叫做实例方法 public void show(){ System.out.println("执行了show方法"); } public Student(){ } public Student(String name){ this.name=name; } //属性 String name; String address="北京"; } //编写学生测试类 class StudentTest{ public static void main(String[] args){ Student.print(); Student s=new Student(); System.out.println(s.name);;//null s.show(); s.print(); } }
3.static修饰代码块
--- 主要完成对静态属性赋值
---静态代码块在类第一次被载入时则执行
class Student{ //静态属性代码块:完成对静态属性赋值 static{ address="北京市"; System.out.println("执行了静态代码块"); } }
4.为什么使用继承
/*
编写狗类:属性--名字、年龄、品种、颜色;方法:显示信息
编写猫类:属性--名字、颜色、性别、年龄;方法:显示信息
编写测试类:创建猫和狗的对象,并分别显示信息
分析得到:
如果多个类中有相同的属性和方法,能否单独编写一个类?----能
解决办法:
--将多个类中相同的属性和方法编写在单独一个类中,该类称为父类
--在子类继承父类,然后在子类中编写独有的属性和方法
动物类:
属性:名字、年龄、颜色
方法:显示信息
狗类 继承 动物类
独有属性:品种
猫类 继承 动物类
独有属性:性别
好处;减少代码的冗余性(重复性)
*/
5.编写继承代码步骤
---第一步:编写父类
[修饰符] class 类名{
//属性和方法
}
---第二步:编写子类
[修饰符] class 子类类名 extends 父类类名{
//编写独有属性和方法
}
---注意:当一个类没有指明继承具体哪个父类时,
则默认继承object类
object类是所有类的父类(超类)
6.继承中注意事项
--子类继承父类,但是不能继承父类的构造方法
--父类也叫做超类(基类),子类也叫做派生类
--继承具有两大特性:
**一个类只能继承一个直接的父类,也就是类的单根性
**类具有传递性
class Animal{ //属性 String name; int age; String color; //方法:显示信息 public void show(){ System.out.println("名字:"+name+"\n年龄:"+age+"\n颜色:"+color); } } //编写狗的子类继承动物父类 class Dog extends Animal{ //编写子类中独有属性和方法 String strain; } //等价于 /*class Dog extends object{ }*/ class Cat extends Animal{ //独有属性:性别 char sex; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?