Java之面向对象(持续更新中)

面向对象的三大特征:封装、继承、多态

定义类的注意事项

用来描述一类事物的类,专业叫做:Javabean类//在javabean中,是不写main方法的
    
编写main方法的类,叫做测试类
//在测试类中创建javabean类的对象并进行赋值调用
  • 类名采用驼峰命名法

  • 实际开发中建议一个文件定义一个class类

  • 变量定义的格式:修饰符 数据类型 变量名称 = 初始化值;一般存在默认值可以不定义初始值

使用小技巧
psvm  // 快速补全main代码
sout  // 补全System.out代码
鼠标滚轮/Alt+左键 //竖向选择

封装

正确的设计对象的属性和方法

在实际开发当中会设计多给对象

  • 对象代表什么,就得对应什么数据,并提供数据对应的行为

  • 找对象,用方法

比如人画圆

意思为人调用了画圆的方法做了一个圆(很重要的思想)——及面向对象

再比如,张三砍了李四——XX持刀行凶,造成了什么后果 及张三调用了行凶的方法,造成了李四的死亡

private 关键字//私有
    目的:保障数据的安全性
   1.是一个权限修饰符
   2.可以修饰成员变量和成员方法
   3.被 private 修饰的成员只能在本类中访问
 public //公共 
  • 针对于每个私有化的成员变量,都要提供get和set方法进行修饰

  • set方法:给每个成员赋值

  • get放法:对外提供成员变量的值

this关键词

成员变量、局部变量

public class GirFriend{
    private int age;//成员变量
    public void menthod(){
        int age = 10;//局部变量
        System.out.println(age);
    }
}
​
//注意成员变量和局部变量重名的时候采用
//就近原则
//System.out.println(age)离age = 10进则输出的结果是10
//当重名时若要使用成员变量中的age,则在age前加入this关键字
@@@如下
​
​
public class GirFriend{
    private int age;
    public void menthod(){
        int age = 10;
        System.out.println(this.age);//修改处
    }
}
//此时的输出结果即为0
​

this的作用

区分成员变量和局部变量

this的本质:自查

构造方法

构造方法也叫做构造器、构造函数

作用:在创建对象的时候给成员变量赋值

  1. 定义

    • 如果没有定义构造方法,系统将给出一个默认的无参的构造方法

    • 如果定义了构造方法,系统将不再提供默认的构造方法

  2. 重载

    • 带参构造方法,和无参构造方法,两者方法名相同,但参数不同,这叫做构造方法的重载

  3. 使用规范

    • 无论是否使用,都手写无参构造方法和带参的全部构造方法

构造方法作用
    创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的
//注意
//任何类定义出来,默认都自带了无参构造器,写不写都有

盲区:构造方法就是用来创建对象的 //误区

标准的JavaBean类

  1. 类名需要见名只意

  2. 成员变量用private修饰

  3. 提供至少两个构造方法

    • 无参构造方法

    • 带全部参数的构造方法

  4. 成员方法

    • 提供每个成员变量对应的setXxx()/getXxx()

    • 其他行为也需要写上

package yjw.SDUT.yjw;
​
public class User {
    private int UserName;//驼峰式命名法
    private String password;
    private String emil;
    private String age;
    public User(){
​
    }//空参
    public User(String password,String emil,String age){
        this.age=age;
        this.emil=emil;
        this.password=password;
    }//全参
    public void setPassword(){//注意set为赋值方法于get区分
        this.password=password;
    }
    //等等
    //快捷键ALt+Fn+Insert(不同电脑区分)
    //或者使用插件PTG(idea中)
}

this的内存原理

this的作用:区分局部变量和成员变量

this的本职:所在方法调用者的地址值

成员变量和局部变量的区别

成员变量:类中方法外的变量

局部变量:方法中的变量

 非重点


static

static表示静态的意思

被static修饰的成员变量,叫做静态变量:

特点:

  • 该类所有对象共享

  • 不属于对象,属于类

  • 随着类的加载而加载,优先于对象存在

调用方法

  • 类名直接调用

  • 对象调用

如班里所有的同学和老师的关系

public class Student{
    String name;
    int age;
    static String teacherName;
    public void show(){
        System.out.print(teacherName);
    }
}
public class Test{
    public static void main(String[]args){
        Student.teacherName = '阿伟';
        Student s1 = new Student();
        s1.name = '张三';
        s1.age = 23;
        Student.s2 = new Student();
        s2.show(``````````);
    }
}
​
​
//s2的输出为‘阿伟’
//不难看出静态变量被所有对象共享

被static修饰的成员方法,叫做静态方法:

  • 多用于测试类和工具类

  • Javabean类中很少用

调用方法

  • 类名调用

  • 对象名调用


注意事项

  • 静态方法中没有this关键字

  • 非静态方法可以访问所有

  • 静态方法中,只能访问静态

this在非静态无参方法中可调用,由虚拟机赋值,表示当前方法调用者的地址值


展开:

Javabean类:用来描述一类事物的类,Student,Teacher等

测试类:用来检查其他类书写是否正确

工具类:不是用来描述一类事物的,而是帮我们做一些事情的类(不懂)

简单而言就是调用函数用


快捷键作用
ctrl +alt +v快速补全类和对象名
ALt + Insert构造函数的快速补全
Alt + Enter快速修复
Alt + 鼠标选择多行编辑

重新认识mian方法

 

继承

java提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立继承关系

实际开发当中不要把多个方法放在一个类中,要符合实际情况,否则工作时绝对会挨骂(笑)

继承的好处

  • 子类中重复的代码抽取到父类中,提高代码的复用性

  • 子类在父类的基础上,增加其他的功能,使子类更加强大

继承中成员变量的访问特点:就近原则

重写、重载

重载和重写是Java中两个重要的概念。重载可以实现本类内的方法多态性,重写可以实现子类或实现类的多态性。

  • 重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

  • 重载(overload) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改

构造方法的访问特点:

  • 父类中的构造方法不会被子类继承

  • 子类中所有的构造方法默认先访问父类中的无参构造,在执行自己

调用父类构造方法:

  • 子类构造方法第一行默认都是super(),不写也存在,且必须在第一行

  • 若有想调用父类有参构造,必须手写super进行调用

多态

同种类型的对象,表现出来的不同形式

父类类型 对象名称 = 子类对象

前提:

  • 有继承关系

  • 有父类引用指向子类对象Fu f = new Zi();

  • 有方法重写

多态调用成员的特点

  • 变量调用:编译看左边,运行优先看左边

  • 方法调用:编译看左边,运行优先 看右边

好处:

  • 多态形式下,右边对象可以实现解耦合,便于扩展和维护

  • 定义方法的时候,使用父类型作为参数,可以接受所有子类对象

    弊端

  • 不能调用子类当中的特有方法(成员方法,父类中不存在)

    • 解决方案:转换成子类类型即可

instanceof关键字:判断变量类型

a instanceof Person
   // 若类型相同,返回true
    //否则返回false
    
常用写法
a instanceof Person b
    //先判断a是否为Person类型,如果不是则强制转换 
    以此进行父子类的转换

用于管理不同功能的java类,方便后期维护

  • 使用同一个包中的类时,不需要导包

  • 使用java.lang包时不需要导包

  • 其余情况需要导包

  • 如果两个类包中类名相同,需要全类名

final

特点:不可改变

使用时:

  • 方法:表明该方法是最终方法

  • 类:表面该类是最终类

  • 变量:叫常量,只能赋值一次

如:
final class Fu{
    public final void show(){
        System.out.println("父类的show方法");
    }
}//该函数则不可修改
​
//同理将类加上final则该类不可继承
​
final int a = 10;

但是当final修饰的变量是引用类型时,则变量储存的地址值不能发生改变,但对象内部的可以改变

如:

 final Student S new = Student("Zhangsan",23);
    S.setName("Lisi");
    S.setAge(24);
//该代码不会报错
  //  同理final定义数组后也可求改其内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值