类和对象 继承 重写 重载 java代码生成顺序

类和对象

  1. 类      : 是一个模板,它描述一类对象的行为和状态
  2. 对象  : 是类的一个实例,有状态和行为
  3. 面向对象的三大特征
  4. 封装,继承,多态

  

  构造函数  :对对象中的属性初始化操作,或者是准备资源

  1. 系统会自动给每一个类添加一个无参构造方法
  2. 如果自定义了构造方法,系统默认构造犯法就不存在了

 

  static

  1. 一个类中静态方法不能直接调用非静态方法
  2. 因为java中类对象先被加载,这时对象还未被加载

 

 

  • 继承
  1. 子类继承父类,子类就拥有父类中定义的可继承的属性和方法
  2. 子类继承父类,单继承(只能有一个父亲)
  3. 可以多重继承(爷孙)

 

  1. 在子类的构造方法中
  2. 第一行代码默认调用父类的无参构造方法
  3. super()必须放在第一行
  4. 假如父类没有无参的构造方法,就会报错
  • 方法重写
  1. 子类重写父类的方法
  2. 方法名不变
  3. 参数列表必须保持不变
  4. 子类中重写的方法的访问权限可以更高(开放),不能更低(闭塞)
  • 方法重载
  1. 方法名一样,参数列表不一样

结构:

 

 

  • Obj1.java

 

 

1     public static void main(String[] args) {
2         
3         Person person = new Person();
4         person.setName("zhangsan");
5         person.setAge(22);
6         person.setSex("male");
7         System.out.println(person.getName());
8         person.speak();
9     }

 

  • Obj2.java
1     public static void main(String[] args) {
2         Son son = new Son();
3         son.name = "zhangsan";
4         son.code();
5         Partent partent = new Son();
6         //Son s = (Son)new Partent();
7         //Son s = (Son)partent;
8         partent.code();
9     }
  • Partent.java
 1 public class Partent extends Person{
 2     
 3     public Partent() {
 4         // TODO Auto-generated constructor stub
 5         System.out.println("调用Partent的构造方法");
 6     }
 7     
 8     public void code() {
 9         System.out.println("I am coding");
10     }
11 }
  • Person.java
 1 package com.obj;
 2 
 3 public class Person {
 4     String name;
 5     private int age;
 6     private String sex;
 7     
 8     public Person() {
 9         this.name = "wangwu";
10         this.age = 22;
11         this.sex = "male";
12     }
13     
14     public Person(String name , int age , String sex) {
15         this.name = name;
16         this.sex = sex;
17         this.age = age;
18     }
19     public void speak() {
20         System.out.println(name + " speak");
21     }
22     public String getName() {
23         return this.name;
24     }
25     public int getAge() {
26         return age;
27     }
28     public String getSex() {
29         return sex;
30     }
31     public void setName(String name) {
32         this.name = name;
33     }
34     public void setAge(int age) {
35         this.age = age;
36     }
37     public void setSex(String sex) {
38         this.sex = sex;
39     }
40 }
  • Son.java
 1 package com.obj;
 2 
 3 public class Son extends Partent{
 4     //子类继承父类,子类就拥有父类中定义的
 5     //可继承的属性和方法
 6     //子类继承父类,单继承(只能有一个父亲)
 7     //可以多重继承(爷孙)
 8     
 9     public Son() {
10         super();
11         //在子类的构造方法中
12         //第一行代码默认调用父类的无参构造方法
13         //super()必须放在第一行
14         //假如父类没有无参的构造方法,就会报错
15         System.out.println("调用Son的构造方法");
16     }
17     
18     public void play() {
19         System.out.println("I am playing...");
20     }
21     
22     //方法重写
23     //子类重写父类的方法
24     //方法名不变
25     //参数列表必须保持不变
26     //子类中重写的方法的访问权限可以更高(开放),不能更低(闭塞)
27     public void code() {
28         System.out.println("I want to earn money");
29     }
30     
31     
32     //方法重载
33     //方法名一样,参数列表不一样
34     public void code(String code) {
35         System.out.println("I am print "+code);
36     }
37     public void code(String code , int a) {
38         System.out.println("I am print "+code);
39     }
40     public int code(int code) {
41         System.out.println("I am print "+code);
42         return 0;
43     }
44 }

 

  • java代码生成顺序
  1. 先加载静态代码
  2. 先加载父类再加载子类
  3. 代码块 > 构造

结构:

 

 

  • O.java

 

 

 1 package com.obj1;
 2 
 3 public class O {
 4     public static void main(String[] args) {
 5         S s = new S();
 6         S ss = new S();
 7         //打印结果是:
 8         //1->4->2->3->5->6(->2->3->5->6)
 9         //1---执行父类静态代码块
10         //2---执行子类静态代码块
11         //3---父类的普通代码块
12         //4---父类的构造
13         //5---子类的普通代码块
14         //6---子类的构造
15         //*******************//
16         //7---父类普通代码块
17         //8---父类的构造
18         //9---子类普通代码
19         //10--子类构造
20         //总结:
21         //1先加载静态代码
22         //2先加载父类再加载子类
23         //3代码块 > 构造
24     }
25 }

 

 

 

  •  P.java
 1 package com.obj1;
 2 
 3 public class P {
 4     static {
 5         System.out.println("1---父类静态代码块---1");
 6     }
 7     public P(){
 8         System.out.println("3---父类构造----3");
 9     }
10     {
11         System.out.println("2---父类普通代码----2");
12     }
13     
14 }
  • S.java
 1 package com.obj1;
 2 
 3 public class S extends P{
 4     static {
 5         System.out.println("4---子类静态代码----4");
 6     }
 7     {
 8         System.out.println("5---子类普通代码块----5");
 9     }
10     public S(){
11         System.out.println("6---子类构造----6");
12     }
13 }

 

posted @ 2022-01-13 20:05  Nickeyhu  阅读(79)  评论(0编辑  收藏  举报