大数据<javaSE + Linux精英实训班>_day_11
1:面向对象 ->构造方法的引入
以Person类为例,创建了人的对象的时候就要给他一个姓名和年龄,怎么做?
package com.itstar.demo1; /* * 自定义的Person类,成员变量,name age * 要求在new Person的同时指定好name与age的值 * 实现功能,医用方法去实现,构造方法 * 作用:在new的同时对成员变量赋值 对对象初始化的时候对new Person的age name赋值 * * 构造方法的定义格式 * 权限 方法名(参数列表){ * * } */ public class Person { private String name; private int age; // 创建构造方法 public Person(String name,int age) { //System.out.println("我是一个空参的构造方法"); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.itstar.demo1; public class Test { public static void main(String[] args) { // 实例对象,调用空参的构造方法 Person p = new Person("李四",20); System.out.println(p.getName()); System.out.println(p.getAge()); } }
2:面向对象->构造方法的作用
在创建对象的时候直接明确属性值
package com.itstar.demo02; /* * 构造方法的重载 */ public class Person { String name; int age; // 写空参的构造方法 public Person() { } // 写有参的构造方法 public Person(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.itstar.demo02; import javax.swing.plaf.synth.SynthSeparatorUI; public class Test { public static void main(String[] args) { // 创建Person类的对象 // 1.构造空参的构造方法,创建对象 Person p = new Person(); p.setAge(20); p.setName("李刚"); System.out.println(p.getAge()); System.out.println(p.getName()); Person p1 = new Person("张三",25); System.out.println(p1.getAge()); System.out.println(p1.getName()); } }
package com.itstar.demo03; /* * this可以在构造方法之间调用 * this.的方式,区分成员变量与局部变量之间的重名情况 * this在构造方法之间的调用,语法this() */ public class Person { String name; int age; // 无参构造 public Person() { name = "李刚"; age = 36; // 参数李刚 36 传递给了变量name age // this("李刚",36);this的作用,在一个构造方法中,调用另外一个构造方法 // 注意:this调用构造方法的时候要在第一行 } // 有参构造 // 构造方法的目的就是new的时候可以直接为你的成员变量赋值 public Person(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.itstar.demo03; public class Test { public static void main(String[] args) { // 创建Person对象 Person p = new Person(); // 创建构造参数的对象 Person p1 = new Person("小鸡",24); System.out.println(p1.getName()); System.out.println(p1.getAge()); } }
package com.itstar.demo04; public class Person { int a = 1; String name; int age; public Person() { System.out.println("父类的构造方法"); // 如果构造方法中有变量 走构造 a = 5; } public Person(String name,int age) { this.name = name; this.age = age; System.out.println("父类的有参构造方法"); } }
package com.itstar.demo04; /* * 子类中,super()的方法,调用父类的构造方法 * super()调用的是空参的构造方法 * super(参数) 调用的是父类的有参构造方法 * * 注意: * 子类构造方法第一行,有一个隐式代码super() * public String(){ * * } */ public class Student extends Person{ public Student() { // 走到父类中的构造类 super("宙斯",20); } }
package com.itstar.demo04; public class Test { public static void main(String[] args) { Student s = new Student(); System.out.println(s.a); } }
package com.itstar.demo05; /* * 注意:构造方法中没有继承也没有重写的概念,构造的名字必须与类名相同 */ public class Person { public Person(int a) { } public Person(double a) { } }
package com.itstar.demo05; public class Student extends Person{ public Student() { super(2); } }
断点调式:
package com.itstar.demo1; /* * 断点调式:debug一下 */ public class Test { public static void main(String[] args) { // 实例对象,调用空参的构造方法 Person p = new Person("李四",20); System.out.println(p.getName()); System.out.println(p.getAge()); } }
综合员工小案例(加入构造方法):
package com.itstar.demo06; public class Person { public Person(int a) { } }
package com.itstar.demo06; /* * 构造方法的第一行写this(); 还是super(); * 不能同时存在,任选其一。保证子类的所有构造方法可以调用父类的构造方法即可 * * 结论:无论如何,子类的所有构造方法,直接、间接调用到父类的构造方法 * 子类的构造方法,什么都不写,默认构造方法的第一行就是super(); * */ public class Student extends Person{ // public Student() { // // super(); // this(); // this调用的是本类当中的构造方法 // } public Student() { // 可以调用下面的构造方法 this("kkk"); } public Student(String s) { super(2); } }
package com.itstar.demo07; public class Person { private String name; private int age; public Person(String name,int age) { this.age = age; this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.itstar.demo07; public class Student extends Person{ public Student(String name,int age) { super(name,age); } }
package com.itstar.demo07; public class Worker extends Person{ public Worker(String name,int age) { super(name,age); } }
package com.itstar.demo07; public class Test { public static void main(String[] args) { // 创建对象 同时指定姓名和年龄 Worker w = new Worker("喜羊羊",20); System.out.println(w.getName()); System.out.println(w.getAge()); System.out.println("----------------------------------------"); Student s = new Student("小黑黑",5); System.out.println(s.getAge()); System.out.println(s.getName()); } }
案例:
package com.itstar.demo08; /* * 员工类: * 共性的提取 * 姓名、编号、工作方法(抽象) */ public abstract class Employee { String name; String id; // 当new对象的时候可以就直接带上姓名和工号 public Employee(String name,String id) { this.name = name; this.id = id; } public abstract void work(); public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
package com.itstar.demo08; public abstract class Develop extends Employee{ public Develop(String name,String id) { super(name,id); } //public abstract void work(); // 可以不写 }
package com.itstar.demo08; public abstract class YunWei extends Employee{ public YunWei(String name,String id) { super(name,id); } }
package com.itstar.demo08; public class JavaEE extends Develop{ public JavaEE(String name,String id) { super(name,id); } public void work() { System.out.println(super.getId() + "---" + super.getName() + "---在打代码"); } }
package com.itstar.demo08; public class Net extends YunWei{ public Net(String name,String id) { super(name,id); } @Override public void work() { System.out.println(super.getId() + "---" + super.getName() + "--正在维护中.."); } }
package com.itstar.demo08; /* * 测试: */ public class Test { public static void main(String[] args) { // 创建对象 JavaEE ee = new JavaEE("李刚","开发部002"); ee.work(); Net n = new Net("贺喜","运维部006"); n.work(); } }