静态方法不能调用非静态
非静态可以访问所有
继承:
爸爸:父类
儿子:子类
父类有的子类都具有,所以子类中只需创造它特有的就行,子类需要用的时候可以直接在父类里面调用。
继承特点:Java只支持单继承,不支持多继承,但支持多层继承。
单继承:一个子类只能继承一个父类
子类不能同时继承多个父类。
多层继承:子类A继承父类B,父类B可以继承父类C。AC关系为间接父类。AB为直接父类。
每一个类都直接或间接的继承于Object。Object类Java虚拟机内本身就存在的。
书写代码:从父类开始写
子类只能访问父类中非私有的成员//私有:private
如果一个类中没有构造方法,虚拟机会自动添加一个空参构造。
内存分析工具
打开方法:+jhsdb hsdb
继承过程中:
成员变量的访问特点:就近原则,谁近用谁。
虚方法表:非private,非static,非final。
方法重写的本质:如果发生了重写,则会覆盖。
只有被添加到虚方法表中的方法才能被重写。
不能被继承,就不能被重写。
构造方法的访问特点:
this,super使用总结:
super中调用的是父类的成员变量。
this是调用的子类的成员变量。
简单电影查询系统:
JavaBean类:
public class movie {private int id;private String name;private String actor;public movie(int id,String name,String actor) {this.id = id;this.name = name;this.actor = actor;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}
}
操作类:
public class movieoperator {private movie[] movies;public movieoperator(movie[] movies){this.movies=movies;}public void findAllmovie(){for(int i=0;i<movies.length;i++){movie m=movies[i];System.out.println("电影编号是:"+m.getId());System.out.println("电影名称是:"+m.getName());}}public void findbyid(int id){for(int i=0;i<movies.length;i++){movie m=movies[i];if(m.getId()==id){System.out.println("电影编号是:"+m.getId());System.out.println("电影名称是:"+m.getName());System.out.println("电影演员是:"+m.getActor());return;}}System.out.println("没有找到该电影");}
}
运行类:
import java.util.Scanner;
// 定义 Movie 类public class system{public static void main(String[]args){System.out.println("---欢迎来到电影管理系统---");System.out.println("操作功能请选择1、2或者3");System.out.println("1.查询所有电影");System.out.println("2.根据电影编号查询电影");System.out.println("3.退出系统");movie[] movies = {new movie(1, "血观音", "文淇"),new movie(2, "风犬少年的天空", "张婧仪"),new movie(3, "我要我们在一起", "张婧仪")};Scanner sc = new Scanner(System.in);movieoperator mo = new movieoperator(movies);while(true){System.out.println("请输入您的选择:");int choice = sc.nextInt();if(choice==1){mo.findAllmovie();}else if(choice==2){System.out.println("请输入电影编号:");int id = sc.nextInt();mo.findbyid(id);}else if(choice==3){System.out.println("感谢您的使用,再见!");break;}else{System.out.println("您的输入有误,请重新输入!");}}}
}
封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
多态:同类型的对象,表现出的不同形态。
多态调用成员的特点:
调用的时候变量是父类的,方法是子类的。