首页 > 编程语言 >Java面向对象编程

Java面向对象编程

时间:2023-09-15 13:32:26浏览次数:42  
标签:Java name 构造方法 age private void 面向对象编程 public

今天开始面向对象了

在这里插入图片描述

面向对象基础

    类:由属性和行为组成
        属性:在类中通过成员变量来体现
        行为:在类中通过成员方法来体现
        public class 类名{
            //成员变量
            变量1的数据类型 变量1;
            变量2的数据类型 变量2;
            ...
            //成员方法
            方法1;
            方法2;
            ...
        }

有几个重要的概念和特性需要了解。

在这里插入图片描述

类和对象
在Java中,类是描述具有相同属性和行为的对象的蓝图。通过定义类,可以创建
多个实例,即对象。对象是类的具体实现,并且可以使用其属性和方法来完成特
定的任务。
封装
封装是将数据和操作组合起来,以便通过类的接口访问它们。通过将数据字段隐
藏在类的内部,并提供公共方法来访问和修改数据,可以保护数据的完整性和安
全性。

在这里插入图片描述

继承
继承是指一个类获得另一个类的属性和方法。通过继承,子类可以重用父类的代
码,并且还可以添加自己的特定功能。在Java中,使用关键字extends实现继承
关系。
多态
多态是指一个对象可以表现出多种形态或类型。通过多态,可以使用统一的接
口来处理不同类型的对象,提高代码的可复用性和可拓展性。在Java中,多态
可以通过方法的重写和接口的实现来实现。
抽象类与接口
抽象类是无法被实例化的类,它可以包含抽象方法和非抽象方法。抽象方法只有
声明而没有具体实现,需要子类去实现。接口定义了一组方法的规范,任何类都
可以实现一个或多个接口。不同类之间通过继承抽象类或实现接口来共享代码
和行为。

在这里插入图片描述

==除此之外==还有其他一些与面向对象相关的概念,如构造函数、方法重载、访问修饰符等。理解这些基础知识也很重要。

代码示例

定义一个新的手机类并在这个类中使用

public class crj {
    public static void main(String[] args) {
        Phone p = new Phone();
        //使用成员变量
        System.out.println(p.brand);
        System.out.println(p.price);

        p.brand = "小米";
        p.price = 2999;

        System.out.println(p.brand);
        System.out.println(p.price);

        //使用成员方法
        p.call();
        p.sendPassage();
    }
}

新定义一个学生类,并在这个类中使用

public class crj {
   public static void main(String[] args) {
       Student s = new Student();
       //调用成员变量
       s.name="高启强";
       s.age=39;
       System.out.println(s.name+s.age);
       //调用成员方法
       s.study();
       s.doHomework();
   }
}
public class Student {
   //成员变量
   String name;
   int age;
   //private int age;

   public void setAge(int a) {
//        age = a;
       if (a < 0 || a > 120) {
           System.out.println("年龄有误");
       } else {
           age = a;
       }
   }

   //成员方法
   public void study() {
       System.out.println("好好学习");
   }

   public void doHomework() {
       System.out.println("多加练习");
       int j = 0;
   }

   public void show() {
       System.out.println(name + "," + age);
   }
   public String getName(){
       return name;
   }
   public int getAge(){
       return age;
   }
}

在这里插入图片描述

private关键字

    是一个权限修饰符
    可以修饰成员
    作用:保护成员不被别的类使用,
            被private修饰的成员只在本类中才能访问
    使用方法
        提供get变量名()用于获取成员变量的值,方法用public修饰
           set变量名(参数)用于设置成员变量的值方法用public修饰


	在Java中,private是一种访问修饰符(access modifier),用于控制类
	的成员(字段和方法)的可见性。具体来说,private修饰的成员只能在所
	属类的内部访问,而在类的外部是不可见的。

	使用private关键字可以实现封装(encapsulation)的概念,将类的内部
	数据和实现细节隐藏起来,只暴露必要的接口给外部使用。这样做的好处是
	可以提高代码的安全性和可维护性,防止外部代码直接访问类的私有成员,
	从而避免不经意间改变了类的内部状态。

下面演示了private关键字的使用:

public class Person {
   private String name;
   private int age;
   
   public Person(String name, int age) {
       this.name = name;
       this.age = age;
   }
   
   public void sayHello() {
       System.out.println("Hello, my name is " + name);
   }
   
   private void increaseAge() {
       age++;
   }
   
   public void celebrateBirthday() {
       increaseAge();
       System.out.println("Happy birthday! Now I'm " + age + " years old.");
   }
}
在上述代码中,name和age字段被声明为private,只能在Person类的内部访
问。sayHello方法是公有方法,可以被外部代码调用。increaseAge方法被声明
为private,只能在Person类的内部调用。
这意味着,当我们创建一个Person对象并调用celebrateBirthday方法时,
age的增加是在类的内部发生的,外部代码无法直接访问和更改age的值。
Person person = new Person("Alice", 25);
person.sayHello();  // 正确,输出:Hello, my name is Alice
person.increaseAge();  // 错误,无法调用私有方法
System.out.println(person.age);  // 错误,无法访问私有字段
person.celebrateBirthday();  // 正确,输出:Happy birthday! Now I'm 26 years old.

总之

private关键字用于限制类的成员的访问范围,只允许在所属类的内部访问。通
过使用private关键字,可以实现封装,提高代码的安全性和可维护性。

在这里插入图片描述

this关键字

主要有以下几个用途:

引用当前对象的实例变量
在类的方法内部,如果局部变量和实例变量同名,可以使用this关键字来指定访
问实例变量。例如:this.variableName。
调用当前对象的其他方法
在类的某个方法内部,可以使用this关键字来调用当前对象的其他方法。
例如:this.methodName()。
在构造方法中调用其他构造方法
在一个类中,可以定义多个构造方法,通过使用不同的参数列表进行重载。如果
一个构造方法需要调用另一个构造方法,可以使用this关键字。
例如:this(parameters)。

代码示例

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

        s.setName("林清玄");
        s.setAge(30);
        System.out.println(s.getName()+","+s.getAge());
    }
}
public class Student2 {
    private String name;
    private int 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;
    }
}

在这里插入图片描述

构造方法注意事项

    创建 如果没有定义,系统将给出一个默认的无参构造方法
          如果定义了,系统将不再提供默认构造方法
    重载 如果自定义了带参构造方法,还想使用无参构造方法,就必须再写
    		一个无参构造方法
    推荐 永远提供无参构造方法

	构造方法名称必须与类名完全相同,大小写也要匹配。

	构造方法没有返回类型,连 void 关键字也不需要。

	如果没有显式地定义构造方法,Java 会自动为类定义一个默认的无参构
	造方法。

	如果自定义了有参数的构造方法,Java将不会自动创建无参构造方法。这
	就意味着,如果需要创建一个对象,必须显式地提供一个无参构造方法。

	如果类中同时存在无参构造方法和有参构造方法,那么在创建对象时默认
	首选无参构造方法。

	构造方法可以重载,也就是说可以定义多个具有不同参数列表的构造方法,
	以应对不同的对象创建需求。

	在子类中,构造方法的第一行必须是调用父类的构造方法,否则编译器会自
	动添加默认的 super() 方法调用。

标签:Java,name,构造方法,age,private,void,面向对象编程,public
From: https://blog.51cto.com/u_16193391/7480337

相关文章

  • 3.4 Java赋值运算符(=)
    赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“=”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。其语法格式如下所示:变量名称=表达式内容在 Java 语言中,“变量名称”和“表达式”内容的类型必须匹配,如果类型不匹配则需要自动转化为对应的类型......
  • 3.5 Java关系运算符
    关系运算符(relationaloperators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系运算符是二元运算符,运算结果是boolean型。当运算符对应的关系成立时,运算结果是true,否则是false。关系表达式是由关系运算符连接起来的表达式。关系运算符中“关系”二字的......
  • 3.6 Java逻辑运算符(&&、||和!)
    逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是true或false。逻辑运算符是对布尔型变量进行运算,其结果也是布尔型,具体如表1所示。表1逻辑运算符的用法、含义及实例运算符用法含义说明实例结果&&a&&b短......
  • 3.8 Java自增和自减运算符(++和--)
    在对一个变量做加1或减1处理时,可以使用自增运算符++或自减运算--。++或--是单目运算符,放在操作数的前面或后面都是允许的。++与--的作用是使变量的值增1或减1。操作数必须是一个整型或浮点型变量。自增、自减运算的含义及其使用实例如表1所示。表1自增、自减......
  • 3.9 Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符
    Java 定义的位运算(bitwiseoperators)直接对整数类型的位进行操作,这些整数类型包括long,int,short,char和byte。位运算符主要用来对操作数二进制的位进行运算。按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值。Java语言中的位运算符分为位逻辑运算符和位移......
  • 3.10 Java三目运算符(条件运算符? :)
    Java 提供了一个特别的三元运算符(也叫三目运算符)经常用于取代某个类型的if-then-else语句。条件运算符的符号表示为“?:”,使用该运算符时需要有三个操作数,因此称其为三目运算符。使用条件运算符的一般语法结构为:result=<expression>?<statement1>:<statement3>;其......
  • 3.12 Java直接量(字面量)
    直接量是指在程序中通过源代码直接给出的值,例如在inta=5;代码中,为变量a所分配的初始值5就是一个直接量。直接量的类型并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有三种类型:基本类型、字符串类型和null类型。具体而言,Java 支持如下8种类型的直接量......
  • 3.11 Java运算符优先级
    所有的数学运算都认为是从左向右运算的,Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数......
  • Java数据类型转换:强制类型转换+自动类型转换
    数据类型的转换是在所赋值的数值类型和被变量接收的数据类型不一致时发生的,它需要从一种数据类型转换成另一种数据类型。数据类型的转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种。隐式转换(自动类型转换)如果以下2个条件都满足,那么将一种类型的数据赋给另外一种......
  • 3.3 Java算术运算符
    运算符丰富是 Java 语言的主要特点之一,它提供的运算符数量之多,在高级语言中是少见的。Java语言中的运算符除了具有优先级之外,还有一个结合性的特点。当一个表达式中出现多种运算符时,执行的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的约束,以便确定是自左向右进......