面向对象

1.构造器

  1. 和类名相同

  2. 没有返回值

  3. new本质在调用构造方法

  4. 初始化对象的值

  5. 定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造

  6. 快捷键:Alt+Insert

    package com.zhang.oop.demo01;
    public class Student {    //构造器
        String name;
        int age;
        public Student() {
        }
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    
    package com.zhang.oop.demo01;
    public class Application {
        public static void main(String[] args) {
            Student studengt = new Student("zhang",34);
            System.out.println(studengt.name);
            System.out.println(studengt.age);
        }
    }
    

    2.方法重写

    非静态:重写 快捷键:Alt+Insert override

    静态方法:方法的调用只和左边有关系,定义的数据类型有关。

    重写:需要有继承关系,子类重写父类的方法!

    1. 方法名必须相同
    2. 参数列表必须相同
    3. 修饰符:范围可以扩大但不能缩小。 public>protected>default>private
    4. 抛出的异常:范围可以缩小,但不能扩大:ClassNotFoundException --> Exception(大)

    为什么要重写

    1. 父类的功能,子类不一定需要,或者不一定满足。

3.多态

  1. 多态是方法的多态,属性没有多态

  2. 父类和子类类型转换异常:ClassCastException

  3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象:Father f1 = new Son();

  4. 不能重写的有:static:方法,属于类,不属于实例。 final 常量。 private方法

​ a继承了b,a重写了b的run()方法,所以a.run()和b.run()运行出来是mad。因为a继承了b中所有的方法,所以都可以调用b中的方法cd()。因为cs()方法是a独有的,所以只有a可以调用,b不能调用。如果想输出b中的run方法可以创建属于b的实例:B b = new B(); b.run();如果想调用a中的cs()方法就得强制转换((A).b).cs();高向低转换。

4.static关键字

public class Person {
    {   //第二个运行
        System.out.println("匿名代码块");
    }
    static {   //第一个运行  只运行一次
        System.out.println("静态代码块");
    }
    public Person(){   //第三个运行
        System.out.println("构造方法");
    }
    public static void main(String[] args) {
        Person person = new Person();
    }
}

5.抽象

public abstract class Action{
    //abstract 抽象类,属于是单继承  只能让继承它的子类去实现
    public abstract void doSomthing(){
        //抽象方法,只有方法名字,没有方法的实现
        //1.不能new这个抽象类,只能靠子类去实现它
        //2.抽象类中可以写普通的方法,抽象方法必须在抽象类中
    }
}

6.接口

package com.zhang.oop.demo02;
public interface UserService {
    void add(String name);   //接口中的所有定义方法其实都是抽象的public abstract(默认的)
    void delete(String name);
    void update(String name);
    void query(String name);
}
package com.zhang.oop.demo02;
public interface TimeService {
    void timer();
}
package com.zhang.oop.demo02;
public class UserServiceImpl implements UserService,TimeService {
    @Override
    public void timer() {  //实现了接口的类 就要实现接口中的方法
    }
    @Override
    public void add(String name) {
    }
    @Override
    public void delete(String name) {
    }
    @Override
    public void update(String name) {
    }
    @Override
    public void query(String name) {
    }
}
  1. 接口不能被实例化,接口中没有构造方法
  2. implements可以实现多个接口
  3. 必须要重写接口中的方法
posted on 2023-03-15 10:15  似初吖  阅读(18)  评论(0编辑  收藏  举报