1.封装小练习--长方形
创建长方形类
使用getset方法
利用返回值方法计算长方形的面积,周长。
保证长方形的长宽为整数
2.继承小练习--猫狗
要求有动物的颜色,几条腿,各自的职责
并将以上颜色,腿字段在父类中私有化
当父类中有构造器时,子类也要有构造器,并且要求设置的参数相同
//自己的low方法
class Animal{
String color;
int leg;
void eat() {
System.out.println("吃东西");
}
}
class Dog extends Animal{
Dog(String c,int l){
System.out.println("狗的颜色是"+c+","+"腿有"+l+"条");
}
void work() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal{
Cat(String c,int l){
System.out.println("猫的颜色是"+c+","+"腿有"+l+"条");
}
void work() {
System.out.println("逮老鼠");
}
}
public class 继承练习 {
public static void main(String[] args) {
Dog d = new Dog("白色",4);
d.work();
Cat c = new Cat("黄色",4);
c.work();
}
}
【狗的颜色是白色,腿有4条
汪汪汪
猫的颜色是黄色,腿有4条
逮老鼠】
改进后:
class Animal{
private String color;
private int leg;
Animal(String color,int leg){
this.color = color;
this.leg = leg;
}
public String getColor() {
return color;
}
public int getLeg() {
return leg;
}
void eat() {
System.out.println("吃东西");
}
}
class Dog extends Animal{
Dog(String c,int l){
super(c,l);
}
void work() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal{
Cat(String c,int l){
super(c,l);
}
void work() {
System.out.println("逮老鼠");
}
}
public class 继承练习 {
public static void main(String[] args) {
Dog d = new Dog("白色",4);
System.out.println("dog");
d.work();
System.out.println(d.getColor());
Cat c = new Cat("黄色",4);
System.out.println("cat");
c.work();
System.out.println(d.getLeg()+"条腿");
}
}
【dog
汪汪汪
白色
cat
逮老鼠
4条腿】
优点:将数据私有化,保证了数据的安全性。并且想输出动物的哪个属性就输出哪个属性,不用全部输出
getset方法
优点:
确保数据的合理性
若使用syso方法输出数据,则需要get方法来获取
3.多态小练习--超人谈生意
4.大概念:
代码块:直接定义在类中或方法中的{ }。
定义在代码块中的变量为局部变量
分类:
局部代码块:定义在方法中,执行方法时才会被调用
初始化代码块:定义在类中(所以其实是构造器后的{ }), 调用一次构造器就执行一次(隐藏的存放在构造器中)
静态代码块:static{ } ,只执行一次,随着字节码的加载而加载。
在main方法之前执行,所以打印出的结果会在最前面
-------小回顾
-1如何调用父类中被隐藏的字段
System.out.println(super.被隐藏的字段名称);
-2如何调用父类中被覆盖的方法
在子类方法中使用super.父类名称
-3如何调用父类中被隐藏的方法
在main方法中使用父类名.方法名
-3方法的覆盖(子类和父类中相同名称的非静态方法)
方法的隐藏(子类和父类中相同名称的静态方法)
-4本类字段的隐藏(在同一个类中,字段名称和方法中参数的名称相同)
调用本类:this.字段名称
调用方法字段:直接写字段名称
-5方法的重载:同一个类中,方法名称相同,但传参个数不同
方法的覆盖:子类和父类中相同的方法签名(方法名称和传参个数)