代码块 内部类 继承 多态
技术
代码块
代码块:在对象创建之前就优先会被调用
修饰符 {
预先执行的内容
}
类里面可以有多个代码块
执行顺序和出现的先后顺序相同
尽量不要在类里面写对个代码块内部类
定义一个类 可以在多个地方定义
1.单独创建一个文件管理一个类
2.直接在文件里面 类A的上面和下面创建
3.直接在某个类A内部创建一个类
一个类A依附于另一个类B-
继承 A extends B
获得父类的方法和属性 并且需要添加自己的属性和方法
Java里面只能单继承,变向的多继承
Person
Student
Teacher所有的类都是直接或者间接继承于Object类
当调用子类的一个方法时,如果没有就会到父类里面去查找
如果在子类里面需要调用父类的方法或者显示调用父类的属性
使用super
什么情况下需要在一个方法里面调用super的对应方法?如果一个方法需要完成一个功能,又不能单独完成,必须要父类做相应的工作
1.父类做完之后 子类再操作
2.子类做点事情之后 在调用父类去完成如果子类里面需要重新实现父类的方法 就需要重写
@Override如果父类有自定义构造方法
子类的构造方法里必须显示调用父类的构造方法如果父类有内部类
子类中有同名的内部类
那么父类中的内部类就被屏蔽了
如果非要使用父类中的内部类 只能使用全类名 Person.inners 多态 polymorphic
1.同一个方法 多种实现 在不同的子类中有不同的实现
2.如果有继承关系:子类的对象可以使用父类变量接收
类型的向上转换
技术运用
- 代码块
int age ;
{
age = 20;
System.out.println("代码块 age = "+age);
}
{
age = 30; //会覆盖前一个代码块赋的值
System.out.println("代码块 age = "+age);
}
静态代码块 会优先调用
static {
// age = 20; 静态代码块里面不能调用成员变量和实例方法
System.out.println("静态代码块");
}
- 内部类
1.静态内部类
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.bottomMergin = bottomMergin;
this.leftMergin = leftMergin;
this.rightMergin = rightMergin;
this.topMergin = topMergin;
}
}
//创建一个相对布局 容器视图
RelativeLayout r1 = new RelativeLayout();
r1.view = "分享按钮";
//显示这个视图
//准备好这个 视图的布局属性
//1.
// RelativeLayout.LayoutParams params =new RelativeLayout.LayoutParams(20,20,20,20);
// r1.show(params);
//使用匿名对象 只需要使用一次
r1.show(new RelativeLayout.LayoutParams(20,20,20,20));
2.静态内部类 可以访问外部类的属性和方法
class TestInner{
int a ;
int b;
Inner inner;
class Inner{
//非静态的内部类 可以访问外部类的属性和方法
public Inner(){
a=20;
b=30;
show();
}
}
public void show(){
System.out.println("a = "+a+" b = "+b);
}
public void test(){
inner = new Inner();
}
}
TestInner ti = new TestInner();
ti.test();
- 继承和多态
定义一个Person2类
import java.util.ArrayList;
public class Person2{
String name;
int age;
public Person2(String name,int age){
this.age = age;
this.name = name;
}
public void walk(){
System.out.println("走路");
}
public void eat(){
System.out.println("吃饭");
}
}
定义一个Servent类表示公务员继承Person2类
public class Servant extends Person2 {
float salary;
int count;
public Servant(String name,int age,float salary,int count){
super(name,age);
this.count = count;
this.salary = salary;
}
public void show1(){
System.out.println("Servant{" +
"salary=" + salary +
", count=" + count +
", name='" + name + '\'' +
", age=" + age +
'}');
}
public void walk(){
System.out.println("hahha走路");
}
public void eat(){
System.out.println("hahahahh吃饭");
}
}
定义一个Staff类表示职工继承Person2类
public class Staff extends Person2{
float salary;
String tec;
public Staff(String name,int age,float salary,String tec){
super(name,age);
this.tec = tec;
this.salary = salary;
}
public void show2(){
System.out.println("Staff{" +
"salary=" + salary +
", tec='" + tec + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}');
} public void walk(){
System.out.println("erieri走路");
}
public void eat(){
System.out.println("etoeit吃饭");
}
}
创建多个职员和公务员 放到一个数组里面
将数组里面所有人的信息输出:体现多态 子类的对象使用父类变量接收
class Test {
public static void main(String[] args) {
ArrayList<Person2> person2s = new ArrayList<>();
Person2 p1 = new Servant("小王", 20, 9434, 39);
Person2 p2 = new Servant("小孙", 29, 3553, 23);
Person2 p3 = new Servant("小李", 22, 2345, 46);
person2s.add(p1);
person2s.add(p2);
person2s.add(p3);
Person2 p4 = new Staff("张三",38,21355,"Android开发");
Person2 p5 = new Staff("李四",28,3546,"搬砖");
Person2 p6 = new Staff("王五",18,2356,"洗盘子");
person2s.add(p4);
person2s.add(p5);
person2s.add(p6);
for (Person2 person2:person2s)
{
if(person2 instanceof Servant){
Servant a1 = (Servant)person2;
a1.show1();
a1.walk();
a1.eat();
}
else {
Staff b1 = (Staff)person2;
b1.show2();
b1.walk();
b1.eat();
}
}
}
}
心得
今天总算感觉要稍微轻松一点了,不像前两天写demo时那么累,基础的一些知识学起来确实不是很难,但是要运用在一起写demo的时候,感觉就不是那么轻松了。就像前两天写demo,自己写的话真的无法下手,不知道怎么开始,更不知道在哪些地方用什么样的方法好,就连听起来也感觉费力。所以我认为要想能写出好程序的话,真的得多写东西,不然光学基础知识还是不如实践啊。