13.Java面向对象知识大全(上)

简介: 13.Java面向对象知识大全

前言

一、面向对象介绍

二、设计对象并使用

1.类和对象

代码实现:

public class Phone {
    //属性
    String brand;
    double price;
    //行为:
    public void call(){
        System.out.println("手机在打电话");
    }
    public void playGame(){
        System.out.println("手机在玩游戏");
    }
}
public class PhoneTest {
    public static void main(String[] args) {
        //创建手机对象
        Phone p=new Phone();
        //给手机赋值
        p.brand="小米";
        p.price=1999.98;
        //获取手机对象中的值
        System.out.println(p.brand);
        System.out.println(p.price);
        //让手机做事情:调用手机中的方法即可
        p.call();
        p.playGame();
        //拥有第二部手机
        Phone p2=new Phone();
        p2.brand="苹果";
        p2.price=8999;
        System.out.println(p2.brand);
        System.out.println(p2.price);
        p2.call();
        p2.playGame();
    }
}

总结:

2.类的几个补充注意事项

3.练习

public class GirlFriend
{
    //属性
    String name;
    int age;
    String gender;
    //行为:
    public void sleep(){
        System.out.println("女朋友在睡觉");
    }
    public void eat(){
        System.out.println("女朋友在吃饭");
    }
}
public class GirlFriendTest {
    public static void main(String[] args) {
        //创建女朋友的对象
        GirlFriend gf1=new GirlFriend();
        gf1.name="刘亦菲";
        gf1.age=18;
        gf1.gender="女";
        System.out.println(gf1.name);
        System.out.println(gf1.age);
        System.out.println(gf1.gender);
        gf1.eat();
        gf1.sleep();
        System.out.println("***************************");
        GirlFriend gf2=new GirlFriend();
        gf2.name="蒋依依";
        gf2.age=18;
        gf2.gender="女";
        //快捷键修改2的时候,可以按住鼠标左键,按住alt不松,选中2,进行批量修改2
        //或者选中2,滑动鼠标滚轮,再修改2
        System.out.println(gf2.name);
        System.out.println(gf2.age);
        System.out.println(gf2.gender);
        gf2.sleep();
        gf2.eat();
    }
}

总结:

4.开发中类的设计

有四类事物,定义为类:

都是名词,定义为属性:

都是动词,定义为行为:

三、封装

画圆的方法应该放到人的对象中还是圆的对象中呢?

答案是:放到圆的对象中

为什么呢?

画圆的时候需要知道半径,定义在圆的对象中

人关门是谁关的呢?

人只是给了一个作用力,门自己把门关上了

1.private关键字(为了成员变量的安全性)

如何实现正确的可以赋值,错误的不能赋值呢?

private一旦修饰完毕后,只能在本类中使用,不能在其他类中使用.

针对每一个私有化的成员变量,都要提供get和set方法.

set方法:给成员变量赋值

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

public class GirlFriend
{
    //属性
    private String name;
    private int age;
    private String gender;
    //setName的作用是给成员变量name赋值,所以要把name的值给过来,定义变量去接
    public void setName(String n){
        name=n;
    }
    //getName的作用是对外提供name属性的,不需要接收什么
    public String getName(){
        return name;
    }
    //setAge:给成员变量age进行赋值的
    //getAge:对外提供成员变量age的值
    public void setAge(int a){
        if(a>=18&&a<=50){
            age=a;
        }else{
            System.out.println("非法参数");
        }
    }
    public int getAge(){
        return age;
    }
    //gender
    public void setGender(String g){
        //由于还没有学到字符串的判断内容,这里就先进行赋值
        gender=g;
    }
    public String getGender(){
        return gender;
    }
    //行为:
    public void sleep(){
        System.out.println("女朋友在睡觉");
    }
    public void eat(){
        System.out.println("女朋友在吃饭");
    }
}
在这里插入代码片public class GirlFriendTest {
    public static void main(String[] args) {
        //创建女朋友的对象
        GirlFriend gf1=new GirlFriend();
        //赋值
        gf1.setName("小诗诗");
        gf1.setAge(18);
        gf1.setGender("女");
        System.out.println(gf1.getName());
        System.out.println(gf1.getAge());
        System.out.println(gf1.getGender());
        gf1.eat();
        gf1.sleep();
    }

2.就近原则和this关键字

当局部变量和成员变量重名时,就会触发就近原则

利用this优化刚刚的GirlFriend类:

public class GirlFriend
{
    //属性
    private String name;
    private int age;
    private String gender;
    //setName的作用是给成员变量name赋值,所以要把name的值给过来,定义变量去接
    public void setName(String name){
        //局部变量表示测试类中调用方法传递过来的数据
        //等号的左边:就表示成员位置的name
        this.name=name;
    }
    //getName的作用是对外提供name属性的,不需要接收什么
    public String getName(){
        return name;
    }
    //setAge:给成员变量age进行赋值的
    //getAge:对外提供成员变量age的值
    public void setAge(int age){
        if(age>=18&&age<=50){
            this.age=age;
        }else{
            System.out.println("非法参数");
        }
    }
    public int getAge(){
        return age;
    }
    //gender
    public void setGender(String gender){
        //由于还没有学到字符串的判断内容,这里就先进行赋值
        this.gender=gender;
    }
    public String getGender(){
        return gender;
    }
    //行为:
    public void sleep(){
        System.out.println("女朋友在睡觉");
    }
    public void eat(){
        System.out.println("女朋友在吃饭");
    }
}

GirlFriendTest代码不变

运行结果:

总结:

四、构造方法

1.构造方法的格式

举例讲解:

public class Student {
    private String name;
    private int age;
    //如果我们自己没有写任何的构造方法,那么虚拟机给我们加一个空参构造方法
    //注意构造方法没有返回值,连void也不能写
    public Student(){
        System.out.println("看看我执行了吗?");
    }
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public  void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return age;
    }
}
public class StudentTest {
    public static void main(String[] args) {
        //创建对象
        //()里面什么也没写,表示调用空参构造,通过观察结果发现确实是调用了空参构造
        //Student s=new Student();
       // System.out.println(s.getName());//获取的是默认初始化值
       // s.setName("张三");   //用set方法进行赋值
        //能否在创建变量的同时就给变量赋值呢?
        //利用有参构造
        Student s=new Student("张三",21);
        System.out.println(s.getName());
        System.out.println(s.getAge());
    }
}

构造方法注意事项:

2.构造方法的作用

创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的.

注意:

为什么呢?见下图:

五、标准JavaBean

1.标准JavaBean类

2.练习:

idea生成set和get方法的小技巧:

1.生成set和get方法的快捷键: alt+insert

如果对你的电脑不起反应,请按: alt+insert+fn

2.插件PTG1秒生成set和get方法

操作如下:

下载之后返回到代码界面,右击空白处:

点击之后可以一键生成空参构造,全参构造和set,get方法.

相关文章
|
12天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
10 2
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
33 4
|
2月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
30天前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
15 0
|
2月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
55 2
|
3月前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
|
3月前
|
Java
【Java基础面试十三】、面向对象的三大特征是什么?
这篇文章介绍了面向对象程序设计的三大基本特征:封装、继承和多态,其中封装隐藏对象实现细节,继承实现软件复用,多态允许子类对象表现出不同的行为特征。
【Java基础面试十三】、面向对象的三大特征是什么?
|
2月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
3月前
|
Java 开发者 C++
下一篇
无影云桌面