60.【Java 进阶】(二)

简介: 60.【Java 进阶】

(三)、sattic的注意事项:(多用在测试类和工具类)

非静态方法只有通过实列化之后才能被调用(也就是new之后)
因为在同一个类中,可以不用套娃.

1.静态方法中没有this指针:

正常的非静态方法中,都会在()里面有一个被隐藏的this指针。这个this指针我们是不能在里面添加元素的,因为这个this是虚拟机虚拟的。this是指谁调用这个函数,那么this就是谁。因为静态方法是归类的全部所有的,所以this指针是没用的。

2.静态方法只能访问静态:

3.非静态方法可以调用所有

(四)、继承:

1.什么时候用到继承:

当类与类之间存在多个共同关系的时候,我们可以设置继承关系。把相同的关系放到基类中去,不同的再分别放到派生类中去。

2.JAVA继承的特点

1.单继承:一个子类只能继承一个父类。

2.不支持多继承: 不能同时继承多个父类。(不同于C++)

3.支持多层继承:

4.java时直接继承或间接继承Object类的。

3.继承权限:

构造方法 :不管什么权限都是不能够继承的。

成员变量:不管什么权限都是能继承的, 只不过public权限的能够直接使用。private的只能借助公有权限的成员方法才能使用。继承和使用是两回事。

成员方法:当权限是非私有、非static、非final的时候就能够被结成和使用.

基类会生成虚方法表,然后当作家谱往后传

(五)、派生类对成员的访问

1.成员变量的访问规则

遵循:就近原则.

基类:

public class Person {
    String name;  //没有访问权限 默认为public
    public Person() {
    }
    public Person(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

派生类:

public class Student extends Person{
    private String name="xiaohei";
    public void show(){
        String name="小王";
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
}

测试类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
        Student s=new Student();
        s.setName("李明");
        s.show();
    }
}

2.成员方法的访问规则:

遵循就近原则:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
    Student s=new Student();
    s.A();
    }
}
class Teacher{
    public void eat(){
        System.out.println("吃教师的饭");
    }
    public void drink(){
        System.out.println("喝教师的水");
    }
}
class Student extends Teacher{
    @Override
    public void eat() {
        System.out.println("吃学生的......");
    }
    @Override
    public void drink() {
        System.out.println("喝学生的......");
    }
    public void A(){
      eat();
      drink();
      this.eat();
      this.drink();
      super.eat();
       super.drink();
    }
}

如果在派生类中,没有对基类的方法进行覆盖。那么输出的结构将都是吃老师的反 喝老师的水。

3.方法的重写

当父类的方法不能满足子类的要求的时候,那么我们需要重写方法。对子类的方法进行重写新的方法。(B继承C,A继承B。如果B发生覆盖。那么A继承的B也是更改的)

重写的注意事项:

1.子类方法名和形参列表要和父类完全相同。

2.子类重新方法的时候访问权限一定要大于等于父类的访问权限。

3.子类重新父类的方法时,返回值类型必须小于等于父类。

4.只有被添加到虚方法表中的方法才能被填写。

相关文章
|
4月前
|
Java Perl
Java进阶之正则表达式
【7月更文挑战第17天】正则表达式(RegEx)是一种模式匹配工具,用于在字符串中执行搜索、替换等操作。它由普通字符和特殊元字符组成,后者定义匹配规则。
32 4
|
4月前
|
设计模式 Java
Java进阶之代理
Java进阶之代理
25 4
|
4月前
|
设计模式 Java
Java进阶之代理
Java进阶之代理
27 3
|
4月前
|
设计模式 Java
Java进阶之代理
【7月更文挑战第16天】Java动态代理通过`java.lang.reflect.Proxy`和`InvocationHandler`实现,无需编译期定义代理类。与静态代理相比,它更灵活,代码更简洁,适用于方法数量变化或未知接口代理。
25 2
|
4月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
37 6
|
4月前
|
Java 编译器 API
Java进阶之标准注解
【7月更文挑战第15天】Java标准注解包括标记注解(如@Deprecated)、@Override(检查方法重写)、@SuppressWarnings(抑制警告)。多值注解如@RequestMapping在Spring中用于HTTP请求映射。元注解如@Retention控制注解保留策略,@Target指定应用位置。Java8引入类型注解(@FunctionalInterface、@SafeVarargs)和重复注解(@Repeatable)。自定义注解可通过反射读取,如示例中的MyMarkerAnnotation等。
24 2
|
4月前
|
安全 Java
Java进阶之枚举
【7月更文挑战第11天】Java枚举是Java 5引入的特性,用于定义固定常量集合,如星期。枚举是继承自`java.lang.Enum`的特殊类,编译后成为final类,每个枚举值是静态final实例。定义枚举用`enum`关键字,如`public enum Weekday {MONDAY, TUESDAY, ...}`。枚举可包含方法和变量,能实现接口但不能继承其他类。例如,`Weekday`枚举可实现`Describe`接口,提供`describe()`方法。在实际应用中,枚举常用于表示如响应状态等固定选项,便于类型安全和代码阅读。
37 8
|
4月前
|
Java 编译器 API
Java进阶之标准注解
Java进阶之标准注解
29 1
|
4月前
|
IDE Java 测试技术
Java进阶之反射
【7月更文挑战第14天】Java反射机制允许在运行时动态获取类信息、创建对象及调用其方法。它基于`Class`类,让我们能访问类的属性、方法、构造器。例如,通过`Class.forName()`加载类,`Class.newInstance()`创建对象,`Method.invoke()`执行方法。反射广泛应用于动态代理、单元测试、序列化及框架中,提供灵活性但牺牲了性能,且可破坏封装性。IDE的代码补全也是反射的应用之一。在使用时需谨慎,避免对私有成员的不当访问。
39 1
|
4月前
|
Java
Java进阶之函数式编程
Java进阶之函数式编程
31 3