ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java入门4 [打印本页]

作者: 金歌    时间: 2023-4-4 14:27
标题: Java入门4
面向对象2

访问修饰符

privatedefaultprotectedpublic当前类✔️✔️✔️✔️同一个包✖️✔️✔️✔️不同包✖️✖️✔️✔️无关类✖️✖️✖️✔️参数传递

基本类型和String类型的参数传递(值传递)

​        在进行基本类型的参数传递是,传的是参数的值,并不是参数本身!当main方法调用其他方法时,改变的只是被调用的方法的参数,与main方法内的参数无关。当方法执行结束后,所有的参数对象都会被gc自动销毁回收。
引用类型的参数传递(内存地址传递)

​        引用数据类型非常多,大致包括:
​        类、  接口类型、  数组类型、  枚举类型、  注解类型
​        在进行引用类型的参数传递是,传的是引用类型的参数地址!当main方法调用其他方法时,进行操作的是卖弄传进来的地址,当方法执行结束后,并不影响更改后的参数对象。
  1. public class Test01 {
  2.     public static void test(int a, int[] arr){
  3.         a = 3;
  4.         int[] arr1 ={5,4,3,2,1};
  5.         arr[0] = 10;
  6.         arr = arr1;
  7.     }
  8.     public static void main(String[] args) {
  9.         int[] arr={1,2,3,4,5};
  10.         int a = 0;
  11.         test(a,arr);
  12.         System.out.println(arr[0]);
  13.     }
  14. }
  15. // 输出的结果:
  16. // a = 0;
  17. // arr = {10,2,3,4,5};
复制代码
<img alt="" loading="lazy">
final常量

特点

封装

封装的目的

提供一个统一的用来设置对象属性和访问对象属性的入口
封装的要求

Java Bean

​        想象一下存在这样一个箱子,其内部被分割成几个格子,每个格子用来存放特定的物品,工人取出或者放入物品后封箱,然后叫了个快递把箱子发出去了。这个箱子就是 Java Bean 啊,取出、放入就是getter、setter,物品就是属性,封箱发出就是序列化和传输。
  1. // 举个栗子
  2. public class Product {
  3.     private int id;
  4.     private String name;
  5.     private double price;
  6.     private double stock;
  7.     public Product(){}
  8.     public int getId() {
  9.         return id;
  10.     }
  11.     public void setId(int id) {
  12.         this.id = id;
  13.     }
  14.     public String getName() {
  15.         return name;
  16.     }
  17.     public void setName(String name) {
  18.         this.name = name;
  19.     }
  20.     public double getPrice() {
  21.         return price;
  22.     }
  23.     public void setPrice(double price) {
  24.         this.price = price;
  25.     }
  26.     public double getStock() {
  27.         return stock;
  28.     }
  29.     public void setStock(double stock) {
  30.         this.stock = stock;
  31.     }
  32. }
复制代码
继承(Java中只支持单继承)

​        Java种的继承解决的是代码复用的问题(父类:共性抽取。子类:功能表现-功能拓展)
​        每一个类都只能有一个父类,但是可以有许多子类
继承带来的好处

  1. // 举个一个栗子
  2. // 新建一个父类Person
  3. public class Person {
  4.     public String name;
  5.     public int age;
  6.     public void eat(){
  7.         System.out.println("Person => eat()");
  8.     }
  9. }
  10. // 新建一个子类Student继承Person
  11. public class Student extends Person{
  12.     public int sno;
  13.     public void study(){
  14.         System.out.println("Student => study()");
  15.     }
  16. }
  17. // 新建一个子类Teacher继承Person
  18. public class Teacher extends Person{
  19.     public int tno;
  20.     public void teach(){
  21.         System.out.println("Teacher => teach()");
  22.     }
  23. }
  24. // 主运行类,Student实例化的对象,拥有Person类里的参数和方法
  25. public static void main(String[] args) {
  26.     Student student1 = new Student();
  27.     student1.name = "student01";
  28.     student1.sno = 10001;
  29.     student1.eat();
  30.     student1.study();
  31. }
复制代码
继承里的构造方法

当new了子类新对象的时候(即对子类对象进行初始化的时候),父类的构造方法也会执行,且其优先级在子类的构造方法之前,因此父类必须拥有无参构造!
(⭐)对于子类的构造方法而言,不管是子类的是有参构造方法,还是无参构造方法,都是默认调用父类的无参构造方法,所以不管父类的构造方法是否有做对象的初始化,都必须将父类的无参构造方法给显式的定义出来
super 的三种用法

this 的三种用法

  1. // 举个一个栗子
  2. // 新建一个父类Person
  3. public class Person {
  4.     public String name;
  5.     public int age;
  6.     // 重写无参构造
  7.     public Person(){
  8.         System.out.println("Person => Person()");
  9.     }
  10.     // 重写有参构造
  11.     public Person(String name, int age) {
  12.         System.out.println("Person => Person(name,age)");
  13.         this.name = name;
  14.         this.age = age;
  15.     }
  16.     public void eat(){
  17.         System.out.println("Person => eat()");
  18.     }
  19. }
  20. // 新建一个子类Student继承Person
  21. public class Student extends Person{
  22.     public int sno;
  23.     // 重写无参构造
  24.     public Student(){
  25.         super(); // 调用父类的无参构造,如果不写默认生成
  26.         System.out.println("Student => Student()");
  27.     }
  28.     // 重写有参构造
  29.     public Student(String name, int age, int sno) {
  30.         super(name, age);// 调用父类的有参构造,如果不写默认调用无参构造,会爆红!!!!!!!
  31.         this.sno = sno;
  32.     }
  33.     public void study(){
  34.         System.out.println("Student => study()");
  35.     }
  36. }
  37. // 主运行类,Student实例化的对象时,先调用父类Person的无参构造,再调用自己的构造方法
  38. public static void main(String[] args) {
  39.     // 通过子类的无参构造,实例化对象(父类无参构造 => 子类无参构造)
  40.     Student student1 = new Student();
  41.     // 通过子类的有参构造,实例化对象(父类有参构造 => 子类有参构造)
  42.     Student student2 = new Student("Robot01",18,10001);
  43. }
复制代码
@Override注解

  1. // 新建一个父类Person
  2. public class Person {
  3.     public String name;
  4.     public int age;
  5.     public void eat(){
  6.         System.out.println("Person => eat()");
  7.     }
  8. }
  9. // 新建一个子类Student继承Person
  10. public class Student extends Person{
  11.     public int sno;
  12.     public void study(){
  13.         System.out.println("Student => study()");
  14.     }
  15.     @Override
  16.     public void eat(){
  17.         System.out.println("Student => eat()");
  18.     }
  19. }
复制代码
抽象类(abstract)

抽象类的概念

​        抽象类是用来捕捉子类的通用性的,它不能被实例化,只能用作子类的超类,抽象类是被用来创建子类的模板,如果父类中的方法无法满足所有子类的需求,这个方法就应该是一个抽象方法
抽象类的特点

抽象类实现
  1. // 新建抽象类Pic,定义抽象方法area()
  2. public abstract class Pic {
  3.     public abstract void area();
  4. }
  5. // 新建类TriAngle,覆写抽象方法area()
  6. public class TriAngle extends Pic {
  7.     @Override
  8.     public void area() {
  9.         System.out.println("TriAngle => area()");
  10.     }
  11. }
  12. // 新建主运行类,测试代码
  13. public static void main(String[] args) {
  14.     TriAngle triAngle = new TriAngle();
  15.     triAngle.area();
  16. }
复制代码
接口(interface)(变向实现多继承)

接口的概念

​        接口相比抽象类,抽象的更加彻底,接口只能描述子类所应当具备的方法,但是没有具体的实现,将功能的定义和实现进行分离,给程序解耦
​        在 JDK1.7 之后接口中可以定义常量,在 JDK1.8 之后接口中可以定义带有方法体的默认方法(default)和静态方法(static),所有版本中都不可以定义普通方法,也不可以定义构造函数,成员变量
接口的特点

  1. // 定义接口
  2. public interface Brake {
  3.     void brakeRole();
  4. }
  5. public interface EnvironmentProtect {
  6.     void emission();
  7. }
  8. public interface Safe {
  9.     void safeRule();
  10. }
  11. // 定义类Car继承接口
  12. public class Car implements Brake,EnvironmentProtect,Safe{
  13.     @Override
  14.     public void brakeRole() {
  15.         System.out.println("Brake => breakRole()");
  16.     }
  17.     @Override
  18.     public void emission() {
  19.         System.out.println("EnvironmentProtect => emission()");
  20.     }
  21.     @Override
  22.     public void safeRule() {
  23.         System.out.println("Safe => safeRule()");
  24.     }
  25. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4