内部类继承多态
静态代码块
代码块就是一段独立的代码空间,静态代码块就是用static来修饰的,用{}包含的一串代码,它的执行顺序和出现的先后顺序相同
内部类
定义一个类 可以在多个地方定义
1.单独创建一个文件管理一个类
2.直接在文件里面 类A的上面和下面创建
3.直接在某个类的内部创建一个类B
代码引用
class RelativeLayout{
String view;
//在显示一个视图前 必须告诉系统这个视图的具体位置
public void show(LayoutParams layout){
System.out.println("视图:"+view+"显示出来了");
System.out.println("left:"+layout.leftMergin+
"top:"+layout.topMergin+
"right:"+layout.rightMergin+
"bottom:"+layout.bottomMergin);
}
public static class LayoutParams{
float leftMergin;
float topMergin;
float rightMergin;
float bottomMergin;
public LayoutParams(float leftMergin, float topMergin,
float rightMergin, float bottomMergin){
this.leftMergin = leftMergin;
this.topMergin = topMergin;
this.rightMergin = rightMergin;
this.bottomMergin = bottomMergin;
}
}
}
class testLayout {
public static void main(String[] args) {
//创建一个相对布局 容器视图
RelativeLayout rl = new RelativeLayout();
rl.view = "分享按钮";
//显示这个视图
//准备好这个视图的布局属性
//1.
// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(20,20,
// 20,20);
// rl.show(params);
//使用匿名对象 只需要使用一次
rl.show(new RelativeLayout.LayoutParams(20, 20,
20, 20));
}
}
运行结果为
image.png
继承
通常表示为A extends B,能够获得父类方法和属性,并且需要添加自己的方法和属性,Java里面只能单继承或者变向多继承
* 所有的类都是直接或者间接继承于Object类
当调用子类的一个方法时,如果没有就会到父类里面去查找
如果在子类里面需要调用父类的方法或者显示调用父类的属性就要使用super
例如
public void walk() {
super.walk();
}
继承一个父类的walk方法
如果一个方法需要完成一个功能,又不能单独完成,必须要父类
做相应的工作,1.父类做完之后 子类再操作
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
2.子类做点事情之后 在调用父类去完成
protected void onDestroy() {
//...
super.onDestroy();
}
如果子类里面需要重新实现父类的方法 就需要重写
@override
如果父类有自定义构造方法
子类的构造方法里必须显示调用父类的构造方法
多态
1.同一个方法 多种实现=在不同的子类中有不同的实现
2.如果有继承关系,子类的对象可以使用父类变量接收类型的自动向上转换
例如代码引用
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void walk() {
System.out.println("手牵手一步两步三步四步望着天");
}
public void eat() {
System.out.println("用嘴吃");
}
}
class CivilServant extends Person{
int salary;
int magazinecount;
public CivilServant(String name,int age,int salary,int magazinecount){
super(name,age);
this.salary=salary;
this.magazinecount=magazinecount;
}
@Override
public void walk(){
System.out.println("慢慢的走");
}
@Override
public void eat(){
System.out.println("慢慢的吃");
}
public void show() {
System.out.println("CivilServant{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
", magazinecount=" + magazinecount +
'}');
}
}
class test{
public static void main(String [] args){
Person[]people=new Person[8];
ArrayList<Person>peoples=new ArrayList<>();
Person w1=new CivilServant("小张",20,8000,25);
Person w2=new CivilServant("小李",20,8500,25);
Person w3=new CivilServant("小陈",20,9000,25);
Person w4=new CivilServant("小刘",20,9500,25);
peoples.add(w1);
peoples.add(w2);
peoples.add(w3);
peoples.add(w4);
这里面就用到上面说的这些,比如最后就是自动向上转换。