学习内容
在创建一个对象之前的准备工作
1.构造方法
2.静态变量
3.静态方法 必须主动调用才执行
代码块:在创建之前就优先被调用
格式:修饰符{
预先执行的内容
}
A.类里面可以有多个代码块
B.执行的顺序和出现的先后顺序相同
C.尽量不要在一个类里面写多个代码块
定义一个类 可以在多个地方定义
1.单独创建一个文件管理一个类
2.直接在文件里面 类A的上下创建
3.直接在某个类A里面创建一个类
一个类A依附于另一个类B
封装
类来封装属性和方法
访问权限private public protected
继承(A extends B)
获得父类的属性和方法 并且需要添加自己的属性和方法
Java里面只能单继承 变向多继承
所有的类都是直接或者间接继承于object类
当调用子类的一个方法时 如果没有就到父类去查找
如果在子类里面需要调用父类的方法或者显示使用父类的属性 使用super
什么情况下需要在一个父类里面调用super的对应方法?
格式:
public void walk(){
super.walk(); }
如果一个方法需要完成一个功能 又不能单独完成 必须要父类作相应的工作
1.父类做完以后,子类在再操作
2.子类做点事情以后再调用父类去操作
如果子类里面需要重新实现父类的方法 就需要重写@override
如果父类有自定义构造方法 子类的构造方法里必须显示调用父类的构造方法
如果父类有内部类 子类中有同名的内部类 父类的内部类就被屏蔽了
如果非要使用父类中的内部类 只能使用全名类 Personal.
多态polymorphic
1.同一个方法在不同的子类中有不同(多种)的实现
2.如果有继承关系:子类的对象可以使用父类变量接收(类型的自动向上转换)
实际操作
package day11;
import java.util.ArrayList;
public class Person {
protected String name;
protected int age;
public Person(String name,int age){
this.age=age;
this.name=name;
}
public void walk(){
System.out.println("走");
}
public void eat(){
System.out.println("喝");
}
}
class CivilServant extends Person{
private int salary;
private int count;
public CivilServant(String name, int age, int salary,int count) {
super(name, age);
this.salary = salary;
this.count=count;}
@Override
public void walk(){
System.out.println("慢慢走");
}
@Override
public void eat(){
System.out.println("大吃大喝");
}
public void cShow(){
System.out.println("CivilServant{"+"name="+name+'\'' + ", age=" + age +
", salary=" + salary +
", count=" + count + '}');
}
}
class Worker extends Person{
private int salary;
private String tec;
public Worker(String name,int age,int salary,String tec){
super(name,age);
this.salary=salary;
this.tec=tec;
}
@Override
public void walk(){
System.out.println("快跑");
}
@Override
public void eat(){
System.out.println("快吃");
}
public void wShow() {
System.out.println( "Worker{" +
"name='" + name + '\'' + ", age=" + age +
", salary=" + salary +
", tec='" + tec + '\'' +
'}'); }
}
class Test3{
public static void main(String[] args){
ArrayList<Person> peoples=new ArrayList<>();
Person c1=new CivilServant("xw",30,5000,31);
Person c2=new CivilServant("xs",32,7000,31);
Person c3=new CivilServant("xa",35,3000,33);
peoples.add(c1);
peoples.add(c2);
peoples.add(c3);
Person w1 =new Worker("Jack",23,4556,"Android开发");
Person w2 =new Worker("Rose",24,5665,"iOS开发");
Person w3 =new Worker("May",29,6757,"web开发");
peoples.add(w1);
peoples.add(w2);
peoples.add(w3);
for (Person p: peoples){ //找到p到底是哪个类型的对象
if(p instanceof CivilServant){ //公务员
CivilServant c = (CivilServant)p;
c.cShow();
c.walk();
c.eat();
}
else{ //员⼯
Worker w = (Worker)p; w.wShow();
w.walk();
w.eat();
}
}
}
}
网友评论