Java学习之路(十)| 再探面向对象

一、static关键字

静态(static)可以修饰属性和方法。
**静态成员是全类所有对象共享的成员。**在这个类中,尽管有多个对象,但static修饰的成员只有一个。这个成员可以通过类名访问。

1、修饰属性

形成静态属性,不再属于对象。
(非静态属性随着对象的创立二产生,每个对象的属性值都是独立的。)
静态属性是属于类的,应该由类来访问,所有的对象共享一份数据。

非静态属性由对象访问:对象.属性–>赋值,取值
静态属性由类访问:类名.静态属性–>赋值,取值

静态属性可以搭配final使用,形成静态常量

public class TestStudent2 {
    public static void main(String[] args) {
        Student2 stu1=new Student2();

        stu1.setName("周国平");
        stu1.setAge(10);
        stu1.setSex('男');
        Student2.city="广州";//静态属性变量,直接由类名赋值
        stu1.print();

        Student2 stu2=new Student2();

        stu2.setName("围裙妈妈");
        stu2.setAge(45);
        stu2.setSex('女');

        Student2.city="重庆";//静态属性变量,改成重庆

        stu2.print();

        System.out.println("*********************************");
        stu1.print();//static变量发生更改,打印为重庆
    }
}

运行结果:
在这里插入图片描述
IDEA代码生成技巧
①右键选择生成
在这里插入图片描述
②下一个菜单选择生成Getter和Setter
在这里插入图片描述

2、修饰方法

静态方法属于类,属于类而不属于对象,类和对象都可以访问。
静态方法中,只能访问类,不能访问对象。
A访问静态属性
B访问静态方法
C不能直接访问非静态属性
D不能直接访问非静态方法

非静态方法中,类和对象都可以访问。
A静态属性
B静态方法
C访问非静态属性
D访问非静态方法
总结:
静态的方法只能访问静态的变量/方法
非静态的方法既能访问静态的变量/方法,也能访问非静态的变量/方法

    public static void staticprint(){
        city="北京";//访问静态变量
        System.out.println("city:"+city);
        setCity("天津");//访问静态方法
        //print();//不能直接访问非静态方法
    }

2、修饰代码块

无论定义在该类的哪个位置,静态代码块在main方法之前就执行,且只执行一次。
在这里插入图片描述构造代码块(没有static修饰的,直接定义在类中的代码块)
在程序中,构造函数执行了多少次,构造代码块就执行了多少次。
在下图的例子中,构造了两个对象,构造函数执行了两次,所以构造代码块执行了两次。
在这里插入图片描述

二、继承

在一个现有的类的基础上去构建一个新的类,构建出来的新类被称作子类(派生类,SubClass),现有类被称作父类(超类,SuperClass),子类会自动拥有福诶所有非私有的属性和方法

好处:
A避免重复的代码。
B扩展类的功能。

子类对象:
可以直接访问父类的非私有属性和方法。
子类可以新增自己的属性和方法。
子类可以重新实现父类已有的方法。

语法结构:

class 父类{

}

class 子类 extends 父类{//extends关键字:表示两个类是继承关系

}

在练习过程中发现的一个细节:
父类的构造函数是有参函数时,直接输入子类创建格式编译器会报错。如图:
在这里插入图片描述IDEA给出的解决方案:在子类中也构建一个有参的构造函数,将参数传入父类的构造函数中。具体实现代码如下图。
在这里插入图片描述

三、super关键字

子类对象的创建过程:
子类的构造方法中,默认先调用父类的无参构造方法。

super关键字作用:
可以访问父类的属性
可以访问父类的方法
指代父类的构造方法,如果有多个,靠参数来区分。要在第一行

this关键字在继承中的作用:
作为本类的对象
访问本类的属性。如果在继承中,本类没有这个属性,再从父类中找
访问本类的方法
可以指代本类的构造方法:this();要在第一行。

1、访问父类属性
在这里插入图片描述在这里插入图片描述在这里插入图片描述用super.i可以访问到父类的i属性。

四、方法的重写(类比重载)

关键字:override
在继承关系中,子类将父类已有的方法重新实现,叫做方法的重写。
规则:
①子类重写的方法的声明必须和父类一致。即参数列表,方法名必须一致,子类的返回值类型可以是父类返回类型的子类。
②子类重写方法的访问权限,不能比父类更加严格。
权限由严格到宽松:private、default、protected、public
③重写的方法不能抛出比父类更大的异常(之后解释)。

@Override//在子类的重写方法前习惯用@Override标记
public void eat(){
	方法体;
}

重载:方法名必须一致,参数列表必须不同(顺序、个数、类型)。

五、访问修饰符

访问权限:对类,方法,变量,常量等访问位置的限定。通过访问修饰符来实现。
①private:私有的,限制在本类中才能访问。
②default:什么都不写就是default,就是default。同类,同包内使用。
③protected:受保护的,同类,同包,不同包的只有子类可以访问。
④public:公共的,同类,同包,不同包。
权限由严格到宽松:private、default、protected、public

六、final关键字

可修饰的内容:类(最终类)、方法(最终方法)、变量(最终变量)
final修饰类:此类不能被继承。String、Math、System均为final修饰的类,不能被继承。
final修饰的方法:此方法不能被覆盖。最终方法:不支持子类以覆盖的形式修改。
final修饰的变量:此变量值不能被改变(常量)。所有final修饰的变量只能赋值一次,值不允许改变。
final修饰应用类型:地址不可变,如对象。
静态常量不再提供默认值,必须手动赋值。如:

public static final double Pi=3.1415;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值