封装 继承 构造体(构造方法)
封装
1.将属性的修饰符写为private,来限制对属性的访问。
package fdt;
public class People {
// 下面的属性犹如电脑机箱中的很多零部件,考虑到安全,为了防止外部对其进行损坏,所以会用一个机箱包裹起来
private String name;
private int age;
private double weight;
private double height;
private boolean sex;
//该属性只能本类才能访问,其他类无法访问
2.Java文件对其访问属性,必须通过方法,下面方法就犹如电脑上的USB接口。对于一个属性就会存在两个对应的方法(get 和 set)
public void setName(String name) {
// this代表本类的对象 关键字 “我的”
// 将来谁调用该方法,this指的是谁
this.name = name;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 0) {
this.age = 0;
return;
}
this.age = age;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public void setHeight(double height) {
this.height = height;
}
public double getHeight() {
return height;
}
public void setSex(boolean sex) {
this.sex = sex;
}
// 注意:boolean的getter方法名为isXxx
public boolean isSex() {
return sex;
}
}
3.在主方法Java文件中,要注意对 set 和 get 的使用(留心观察下面代码)。
package com.madling;
import fdt.People;
public class Text {
public static void main(String[] args) {
// TODO Auto-generated method stub
People sunsun = new People();
sunsun.setName("傻子");
sunsun.setAge(15);
sunsun.setHeight(175.0);
System.out.println("名字:" + sunsun.getName() + "\n" +
"年龄:" + sunsun.getAge() + "\n" +
"身高:" + sunsun.getHeight());
}
}
————————————————————————————————————————————————
继承
1.关键字 extends 扩展
继承存在的意义:子类会继承父类所有非私有的属性和方法。
// 继承的基本形式
class 父类 {
}
class 子类 extends 父类 {
}
2.继承是一种扩展。
在实际开发中,会把不同类的相同代码提取出来,抽离成一个父类,然后继承父类即可。
3.java是单继承,不支持多继承,可以多重继承
4. Object是顶级父类,任何类最终都继承于它
——————————————————————————————————————————-------------------
构造方法(构造器constructor)
创建对象用的,并且完成对象的初始化(属性赋值)
该图是:构造方法之后的方法的调用
构造方法的基本结构
public People(){
------ // 没有返回类型且名字要和类名相同
}
————————————————————————--------------------------------------------
1. 无参构造
任何一个类创建默认都带一个无参构造,用于创建对象的,在new之后。
默认的构造是隐藏起来,当然我们可以让它显式的呈现出来
// 无返回值类型 名字与类名相同
public People() {
System.out.println("当此方法执行完毕后,创建了一个新对象");
}
2.有参构造
// 有参
public People(String name, int age, double weight) {
this.name = name;
this.age = age;
this.weight = weight;
}
// 有参构造的参数是不定的
何时会用到?
一次性创建对象并完成对象的初始化
People lisiPeople = new People("xiaosi",0,2);
3. 子类的有参构造问题
public Man(String name,int age,double weight) {
// 下面的代码调用的父类有参构造,完成的子类对象的初始化。
super(name, age, weight);
}
综合代码
People.java
package com.zhiyou.model;
public class People {
private String name;
private int age;
private double weight;
// 无返回值类型 名字与类名相同
public People() {
System.out.println("当此方法执行完毕后,创建了一个新对象");
}
// 有参
public People(String name, int age, double weight) {
this.name = name;
this.age = age;
this.weight = weight;
}
// 有参构造的参数是不定的
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;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
Man.java
package com.zhiyou.model;
public class Man extends People {
public Man(String name,int age,double weight) {
// 下面的代码调用的父类有参构造,完成的子类对象的初始化。
super(name, age, weight);
}
}
Test.java
package com.zhiyou.test;
import com.zhiyou.model.Man;
import com.zhiyou.model.People;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
People zhangsanPeople = new People();
// 对象的初始化
// 给刚生下来的小孩设置初始值
zhangsanPeople.setName("zhangsan");
zhangsanPeople.setAge(1);
zhangsanPeople.setWeight(4);
// 上面一坨代码,就可以用一行代码搞定,也就是调用有参构造
People lisiPeople = new People("xiaosi", 0, 2);
// 下面new 后调用的仍旧是父类的有参构造,返回的是父类的对象
// so,构造方法是不能被继承的。
// Man wangwuMan = new People(name, age, weight);
Man wangwuMan = new Man("wangwu", 1, 5);
System.out.println(wangwuMan.getName()+","+wangwuMan.getAge() + "," + wangwuMan.getWeight());
}
}