首页 > 其他分享 >面向对象(二)

面向对象(二)

时间:2023-11-05 15:44:45浏览次数:28  
标签:继承 子类 public 面向对象 static 静态 class

static关键字

static静态的意思,在之前写方法的时候就使用到这个关键字,这里讲主要讲讲static关键字的用法。

static修饰的成员会随着类的加载到内存中,但类的加载只能执行一次,即static修饰的成员也只能加载一次,而如果没有static修饰的成员只能随着类对象的加载到内存中。

凡是使用static修饰的成员都可以通过类名调用

举个例子:

 1 public class Rec {
 2     //长
 3     public int length;
 4     //宽
 5     public int width;
 6     //矩形面积,随着类的加载而加载到内存中
 7     public static double area;
 8     //矩形面积,static修饰的成员可以通过类名调用方法
 9     public static void show(){
10         //这里需要注意由于类的加载比类对象的加载要先执行
11         //所以静态方法无法调用非静态的成员
12         System.out.println("我是一个show方法");
13     }
14 }

Test测试类:

 1 public class Test {
 2     public static void main(String[] args) {
 3         //静态成员可以通过类名直接调用变量
 4         Rec.area=10;
 5         //静态成员可以通过类名直接调用方法
 6         Rec.show();
 7         //但是非静态成员不能通过类名直接调用,只能通过对象调用否则会报错
 8         //Rec.length=10;   报错
 9     }
10 }

那static一般是什么时候去使用呢?

当你定义一个工具类时,里面的方法要使用static修饰,其他的类一般不使用static修饰,因为static修饰的方法只能调用static的成员

静态代码块

了解静态代码块之前,先了解代码块。

代码块的格式:

{

    代码内容;

}

而静态代码块对于代码块而言多一个static来修饰,代表是一个静态的成员

静态代码块的格式:

static  {

    代码内容;

}

由于静态代码块有static进行修饰,所以静态代码块也是随着类的加载而加载到内存中,所以也是只加载一次。

举个例子:

1 public class Test {
2     static{
3         System.out.println("这是一个静态代码块");
4     }
5     public static void main(String[] args) {
6 
7     }
8 }

并且静态代码块会比主函数还要先执行。

举个例子:

1 public class Test {
2     static{
3         System.out.println("这是一个静态代码块");
4     }
5     public static void main(String[] args) {
6         //主函数中写一句输出语句
7         System.out.println("你好");
8     }
9 }

效果展示:

 从这里看出静态代码块执行的是比主函数的代码还要优先执行,所以静态代码块一般是用于加载资源比如数据库连接池的信息,文件信息,外部文件的加载等,都会写在静态代码块中,并且静态代码块只会执行一次。

对象数组

对象数组:就是一个数组,但是里面存储的内容不是单纯的基本数据类型,而是引用数据类型中的类对象。

语法:

类名 []   数组名=new  类名[长度];

Rect类:

 1 public class Rec {
 2     //长
 3     public int length;
 4     //宽
 5     public int width;
 6 
 7     public Rec() {
 8     }
 9     public Rec(int length, int width) {
10         this.length = length;
11         this.width = width;
12     }
13     public void show(){
14         System.out.println("这是一个show方法");
15     }
16 }

测试类:

 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         //实现一个对象数组里面存储2个对象
 5         Rec[] recs=new Rec[2];
 6         //生成一个匿名对象,存储数组角标为0的位置
 7         recs[0]=new Rec(10,38);
 8         //生成一个匿名对象,存储数组角标为1的位置
 9         recs[1]=new Rec(23,29);
10 
11     }
12 }

继承

继承是面向对象(oop)中第二大特性

什么是继承

继承可以使子类获取父类中的属性和方法,也可以在父类的基础之上重新定义方法,追加属性等

如果类A继承类B,也就是所类A被称为子类,而类B被称为父类或基类。

为什么使用继承

上面也提到,继承可以使子类获取父类的属性和方法,所以继承的特点:

①可以提高代码的复用性

②可以起到很好的扩展的作用

如何实现继承

语法:

public class  子类名  extends   父类名{
                        

}

举个例子:

需求是:动物园中引入了小猫(Cat)、小狗(Dog)它们同样有姓名(name),年龄(age),颜色(color)属性,都有一个睡觉方法sleep()需要同一修改这些动物的名称。

这种可以使用继承的方式,将姓名、年龄、颜色分别提取出来当作一个大的类。

代码:

 1 //小狗和小猫都是动物的一种
 2 //所以我们可以将小猫和小狗中公共的部分提取出来作为一个大的类为Animal
 3 public class Animal {
 4     public String name;
 5     public int age;
 6     public String color;
 7     
 8     public void sleep(){
 9         System.out.println(name+"在睡觉");
10     }
11 }
12 //这里写小狗类使用继承,就可以拥有Animal的属性
13 class Dog extends Animal{
14 
15 }
16 //这里写小猫类使用继承,就可以拥有Animal的属性
17 class Cat extends Animal{
18 
19 }

测试类:

 1 public class Test {
 2     public static void main(String[] args) {
 3         Dog dog=new Dog();
 4         //这里发现子类中Dog类没有写任何属性,但是也是可以调用name属性
 5         dog.name="旺财";
 6         //这里发现子类中Dog类没有写任何属性,但是也是可以调用age属性
 7         dog.age=3;
 8         //这里发现子类中Dog类没有写任何属性,但是也是可以调用color属性
 9         dog.color="黄色";
10         //所以通过继承可以让子类获取父类中的成员,甚至方法也可以继承过来
11         dog.sleep();
12 
13         Cat cat=new Cat();
14         cat.age=4;
15         cat.name="波斯猫";
16         cat.color="蓝色";
17         cat.sleep();
18     }
19 }

子类可以在父类原有的基础上扩展自己的成员

子类在继承父类的成员时,也可以扩展自己的成员

举个例子:

父类(Person类)

1 public class Person {
2     public String name;
3     public int age;
4     public char sex;
5     
6     public void sleep(){
7         System.out.println(name+"正在睡觉");
8     }
9 }

子类(Teacher类)

1 public class Teacher extends Person{
2     //可以扩展成员属性内容
3     public String lesson;
4 
5     //可以扩展成员方法内容
6     public void teach(){
7         System.out.println(name+"正在教学");
8     }
9 }

继承的注意事项

继承给我们带来许多的便利,但是我们也要遵守继承的规则,这样才能更好的掌握继承

①Java中继承是只支持单继承的,意味着一个类只能有一个父类好比如一个人只能有一个爹一样。

②子类只能继承父类的非私有的成员(成员变量和成员方法),比如父亲私有的东西儿子是没办法得到的

③不要为了继承部分功能而使用继承,类与类之间要是A is  B才能使用继承

标签:继承,子类,public,面向对象,static,静态,class
From: https://www.cnblogs.com/gzyhrc/p/17810439.html

相关文章

  • 面向对象和面向过程
    面向对象,里面的“面向”是什么意思呢,“面向”的意思就是面对着,面向对象,就是你看到的都是对象,比如你做一顿午饭,面向对象的就是:盖浇饭,茶水面向过程的话就是:炒饭+米饭+炒菜 所以这里的面向,是程序员面向,从程序员视角看到的世界,如果看到的是一个个对象,那就是面向对象,如果看到的是一......
  • python面向对象-学习笔记(八、综合案例)
    计算器,实现一些基本的操作,加减乘除运算,以及打印结果操作点击查看代码importwin32com.clientclassCaculator:#装饰器私有def__check_num_zsq(func):definner(self,n):ifnotisinstance(n,int):raiseTypeError("......
  • JavaSE(09) - 面向对象进阶
    JavaSE(09)-面向对象进阶p121static关键字static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量.一,被static修饰的成员变量,叫做静态变量.特点:被改类所有对象共享不属于对象属于类随着类的加载而加载,优先于对象存在调用方式:类名调用(推荐)对......
  • JavaSE(10) - 面向对象进阶
    JavaSE(10)-面向对象进阶P129认识多态(polymorphism)多态就是对象的多种形态多态的前提是:1,有继承/实现关系2,有父类引用指向子类对象3,有方法重写多态的好处:使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利P130多态调用成员的特点调用......
  • python面向对象-学习笔记(七、对象的生命周期)
    概念生命周期一个对象,从诞生到消亡的过程一个对象被创建时,会在内存中分配相应的内存空间进行存储当对象不再使用,为了节约内存,就会把这个对象释放掉涉及问题如何监听一个对象的生命过程?python如何掌握一个对象的生命?监听对象的生命周期__new__方法当我们创建......
  • Java基础之面向对象
    面向对象什么是面向对象?面向对象与面向过程的区别是什么?什么是面向对象?面向对象,就是数据和数据的操作放到一个整体----对象,通过对象来实现某些操作面向对象与面向过程的区别是什么?面向过程是一步一步实现方法,从来实现某些操作。它们两者自己的区别可以用一个大象放冰箱的例......
  • 五、Java面向对象:多态
    一、多态介绍概述:顾名思义就是事物在某种时刻的多种状态前提;1、要有继承关系2、要有方法的重写3、要有父类的引用指向子类对象 访问成员的特点:访问成员变量:编译看左,运行看左访问成员方法:编译看左,运行看右访......
  • 五、Java面向对象:继承
    一、概述继承的概述:将多个类相同的部分使用同一个类括起来,其他类与这个类产生继承关系,这样其他类就包含了这个类的成员关键字:extends描述:classAextendsB(){}A:子类,派生类B:父类,超类,基类特点:  java中类与类之间只能单继承......
  • 面向对象(OOP)08~17
    面向对象(OOP)08~171.封装​ "高内聚、低耦合",内部细节自己完成;仅暴露少量方法给外部使用。​ 属性私有,get/set//private:私有publicclassStudent{ //属性私有privateStringname;//名字privateintid;//学号privatecharsex;//性别//get......
  • 软件设计实验1:UML与面向对象程序设计原则
    实验1:UML与面向对象程序设计原则本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;2、理解面向对象程序设计原则。 [实验任务一]:UML复习阅读教材第一章复习UML,回答下述问题:面向对象程序设计中类与类的关......