Java学习第六天

发布时间:2026/7/21 18:23:27

Java学习第六天 后续的各种用法都是在创建好类的基础上去使用的1、类中常见的其他用法1.1this关键字this的作用表示当前对象指向调用对象this调用属性可以在普通方法中调用也可以在构造方法中调用在普通方法中使用this一般是局部变量和成员变量同名通过this指向成员变量普通方法中的this指向调用者哪个对象调用方法就指向哪个对象构造方法中的 this指向 new 出来的对象new 出来的是哪个对象就指向哪个对象this 用来调用方法 在类中的成员方法中可以通过 this 调用其他的成员方法可以省略 thisthis 用来调用构造方法 在当前构造方法中可以调用其他构造方法写法this(参数)参数传的值决定了你调用的是哪个构造方法①this调用属性局部变量和成员变量同名的话必须加上this来区分加上this后的变量指向成员变量②this调用方法this可加可不加③this调用构造方法不能调用自身thisthis后面直接写括号的写法表示调用类中的其他构造方法this后面括号中的参数类型就表示调用构造方法的是哪个this调用构造方法this语句必须在第一行----第三种方法搭配使用 public Person(){ this(jack); } public Person(String name){ this.namename; }----第二种方法搭配使用 public void setName(String name){ this.namename; } public String getName(){ return this.name; }1.2封装Java 中的封装是一种隐藏技术可以把程序的设计者和使用者分开使用者不必知道程序设计的细节直接使用就行也可以增加代码的安全性实现封装的方式通过private关键字实现①private和public都是修饰符直接把public换成private就可以了②private可以用在属性、构造方法、成员方法的前面一般来说构造方法不加private普通方法前面不加privatepublic class Student { //给属性加上private private String name; private int age; private String gender; private Student(String name, int age, String gender) { this.name name; this.age age; this.gender gender; } private void show(){ } }private使用特点1使用 private 以后在其他类中无法直接调用被 private 修饰的属性、方法2一般情况下一个类中属性需要加上private 构造方法和普通方法根据需求决定是否加上 private3属性私有化以后在其他类中不能直接通过 .点 的方式赋值 或者 获取值可以在类中创建set/get 方法通过 set 方法赋值 通过 get 方法获取值一次性可以获取一个值私有化的属性可以有 2 种方式赋值set 方法 和全参构造只有 1 种方法获取值 get 方法public class Student { //给属性加上private private String name; private int age; private String gender; public Student(String name, int age, String gender) { this.name name; this.age age; this.gender gender; } public Student() { } public String getName() { return name; } public void setName(String name) { this.name name; } public void show(){ System.out.println(我的姓名是name我的年龄是age我的性别是gender); } }public class Text { public static void main(String[] args) { Student s1new Student(张三,24,男); s1.show(); System.out.println(s1.getName()); Student s2new Student(); //set方法赋值 s2.setName(木木); s2.show(); //get方法获取值 System.out.println(s2.getName()); } }1.3访问修饰符public 公共的公开的 可以在任意的位置访问 public 修饰的内容private 私有化的 只能在当前类中使用其他类中用不了default 默认的 属性前面不写任何修饰符 就是默认的 同一个包下的不同类中可以访问protected 受保护的 同一个包下类或者不同包下的子类可以访问1.4继承extends继承的概念把多个具有相同属性的类抽取其中的属性放入到另一个公共的类A中让被抽取的类和这个类A产生一个关系所有被抽取的类也具有了这个类A的所有公共的属性和方法这种关系就称为继承被继承的类称为父类、超类、基类继承的类称为子类继承的写法使用entends关键字实现class B entends A{ }继承的好处提升了代码的复用性让类和类之间产生关系是多态的前提继承的坏处增加了类和类之间的耦合性关联性继承的特点①继承的时候子类可以继承父类非私有的属性、方法不能直接继承父类私有的属性但是可以间接的使用 可以通过继承父类的 set 方法完成属性的赋值通过继承父类的 get 方法完成属性值获取。②继承的时候子类不能继承父类的构造方法但是可以通过 super 关键字去访问父类的无参或者有参构造如果希望通过有参构造创建子类对象那么就可以通过super访问父类的有参构造③继承的时候如果没有显式的继承某个类系统会自动让类去继承 Object 类Object 类是所有类的父类也称为始祖类④继承只能单继承不能一次性继承多个类但是可以多重继承public class Person { String name; int age; String gender; public void show(){ System.out.println(我的姓名是name我的年龄是age我的性别是gender); } }public class Student extends Person { }public class Text { public static void main(String[] args) { Person pnew Person(); p.name张三; p.age18; p.gender男; p.show(); Student snew Student(); s.name李四; s.age19; s.gender男; s.show(); } }1.5 继承中super的使用用super继承父类的构造方法——无参、有参super关键字的用法①super 关键字表示父类对象只能用在子类中用来调用父类非私有的属性、方法、构造方法②super 调用属性使用的情况非常少见因为大部分的类属性都会加上 privatesuper 无法调用 private 属性③super 调用父类的方法一般子类存在和父类同名方法的时候可以通过 super 区分调用的是父类的方法还是子类的方法super 调用父类的构造方法①所有的子类构造方法都会访问父类的构造方法默认是访问无参构造②将来我们可以通过在子类中编写super(参数)调用父类的有参构造让子类访问父类的有参构造③将来编写父类的时候尽量把无参构造加上如果父类没有无参构造子类必须通过super访问父类的有参构造④super 调用构造方法的写法是 super()括号中传入参数的类型表示调用父类的哪个有参构造⑤super()在子类调用父类构造方法的时候必须写在子类构造方法的第一行不能和 this() 调用构造方法的写法同时出现public class Person { private String name; private int age; private String gender; public Person(String name, int age, String gender) { this.name name; this.age age; this.gender gender; } public void show(){ System.out.println(我的姓名是name我的年龄是age我的性别是gender); } }public class Teacher extends Person { public Teacher(String name, int age, String gender) { super(name, age, gender); } public Teacher() { } }public class Text { public static void main(String[] args) { Teacher tnew Teacher(木木,22,女); t.show(); } }1.6子类有自己的属性子类有自己的属性时使用super继承父类构造方法之后还要在继承来的构造中加上子类自己的属性以及set、get方法public class Teacher extends Person { private String cname; public Teacher() { } public Teacher(String name, int age, String gender,String cname) { super(name, age, gender); this.cnamecname; } public String getcname() { return cname; } public void setcname(String cname) { this.cname cname; } public void show(){ System.out.println(我的姓名: getName()我的年龄getAge()我的性别getGender() 我教授的课程cname); } }1.7方法重写子类默认可以继承父类的公共的方法但是有的时候父类方法功能不是子类想要的 那么子类就可以重新编写父类的方法这个动作就是重写方法。方法重写 在继承关系中子类重写父类的方法方法名相同、参数列表相同、返回值类型相同或者是父类方法返回值类型的子类访问修饰符不能严于父类不能比父类抛出更多的异常。Override 方法重写的检查注解如果不符合重写规则提示错误第一段代码和第二段代码对比观察package com.day8.test4; public class Father { public void method(){ System.out.println(这是父类的普通方法); } public Father method1(){ System.out.println(这是父类的普通方法); return new Father(); } public void method2(int a,int b){ System.out.println(a b); } public void method3(){ System.out.println(父类的普通方法); } }package com.day8.test4; public class Son extends Father{ Override public void method() { System.out.println(子类重写方法); } //返回值类型是父类方法返回值的子类 public Son method1(){ return new Son(); } //Override //参数类型不一样不是重写 public void method2(String a,String b){ System.out.println(a b); } // Override //修饰符不能严于父类 // private void method3() { // // } }方法重写的应用重写equals方法package com.day8.test4; import java.util.Objects; public class Student { int sid; String name ; String className; public Student() { } public Student(int sid, String name, String className) { this.sid sid; this.name name; this.className className; } Override public final boolean equals(Object o) { if (this o) return true; if (!(o instanceof Student student)) return false; return sid student.sid Objects.equals(name, student.name) Objects.equals(className, student.className); } Override public int hashCode() { int result sid; result 31 * result Objects.hashCode(name); result 31 * result Objects.hashCode(className); return result; } }

相关新闻