Java语言的学习与实践5(代码块,内部类,继承,多态)

1.收获

今天学习的知识点比较多一点,尽管有点多,但是这些知识点有的是比较好理解的,也有不好理解的,无论是那个知识点我们都应该好好的对待,都是不可忽视的,还是那句话没有雨点汇不成河流。眨眼间,在这里的十几天就这样过去了,今天我的朋友问我这十几天学到东西没,我是这样回复的,在这十几天没有浪费,希望自己在一个月后能够看到自己身上的变化。其实当初来这里就是为了学到东西,在这里感觉收获很多,比之前多的多。希望自己能在接下来的日子里再接再厉,加油!!!

2.技术

(1)代码块的种类和应用
(2)内部类的定义与应用
(3)继承的定义与应用
(4)多态的定义和应用

3.技术的实际应用和实践

(1)码块的种类和定义
什么是代码块:代码块用的是{}围起来的,他也是类的组成部分
代码块的分类:普通的代码块和静态的代码块
模式:
修饰符{
预先执行
}
注意:代码块:在对象创作之前就会先被调用
例如:

class Person{
    int age;
    //代码块 也是类的组成部分
    {
        age=20;
        System.out.println("代码块 age="+age);
    }
    //静态代码块
    static{
//        age=30;//静态代码块里面不能调用成员变量和实例方法
        System.out.println("静态代码块");
    }

    public Person(){
        System.out.println("无参构造方法 age="+age);
    }
    public Person(int age){
        this.age=age;
        System.out.println("有参构造方法");
    }
}

注意类里面有多个代码块, 执行顺序和代码块出现的顺序相同,但是尽量不要在类里面写多个代码块。
(2)内部类的定义与应用
我们在定义一个类的方式有很多种
定义一个类 可以在多个地方定义
1.单独创建一个文件来管理一个类
2.直接在文件里面 类的上面和下面创建
3.直接在某个类内部创建一个类
一个类A依附于另一个类B,也就是A的内部有B

什么是内部类:按照我自己的理解就是在一个类里面的在定义一个类
内部类有什么作用:按照自己的理解就是如果你想在一个类实现一个某些功能,但是这个功能要一些属性和方法来实现,那么我们就可以用一个类来实现这个功能。
内部类的种类:内部类可以分为普通的内部类和静态的内部类
例如:

class TestInner{
    int a;
    int b;
    Inner inner;
    class Inner{
        //非静态的内部类 可以访问外部类的方法和属性
        public Inner(){
            a=20;
            b=20;
            show();
        }
    }
    //用一个函数启动内部类的构造函数的启动
    public void test(){
        inner=new Inner();
    }

    public void show(){
        System.out.println("a="+a+" b="+b);
    }
}

在主函数中的调用

TestInner t1=new TestInner();
        t1.test();

在主函数中我们需要创建一个类的对象,这个类是是包含内部类的类。
(3)继承的定义与应用
什么是继承:按照我的理解就是先有一个类,然后再创建一个类,但是这个类需要有一些属性和方法是先前的那个类的属性和方法,但是又想自己比先前的那个类的属性和方法多,所以我们就可以采用类的继承。
形式: A extends B
例如:

class Person1{
    String name;
    private int age;
//有参构造函数
    public Person1(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void walk(){
        System.out.println(name+":人走路");
    }
    public void eat(){
        System.out.println(name+":人吃饭");
    }
}
class Student extends Person1{
    int id;
    String school;
//有参构造方法
    public Student(String name,int age,int id,String school){
//这里的super就是父类,因为子类不能完成这个工作,需要父类来完成
        super(name,age);
        this.id=id;
        this.school=school;
    }

    public void show(){
        System.out.println("name:"+name);
    }
     public void study(){
    }
}

如果子类需要重新实现父类的方法 就需要重写
@oerride
例如:这是建立在上面的子类基础上的

@Override
    public void eat(){
        super.walk();
        System.out.println("学生小口吃饭");
    }
    @Override
    public void walk(){
        System.out.println("学生优雅走路");
        super.walk();
    }

这里的super也是父类,因为walk和eat方法是在父类种需要父类来实现,也就是说如果父类有自定义构造方法,那么子类的构造方法必须显示调用父类的构造方法。

注意:如果在父类中有内部类,那么如果父类有内部类,子类有同名的内部类
那么父类的内部类就被屏蔽了,如果非要使用父类中的内部类 只能用全类名。
(4)多态的定义和应用
什么是多态:按照我自己的理解就是就是一个方法可以有多种不同的实现方式或者是在不同的类中有不同的实现。
注意:如果用继承关系:子类的对象可以使用父类来接收 类型的自动向上转换
例如:

class A{
    public void info(){
        System.out.println("in A");
    }
}
class B extends A{
    @Override
    public void info() {
        System.out.println("in B");
    }
}
class C extends A{
    @Override
    public void info() {
        System.out.println("in C");
    }
}

一个类的方法可以在其他的类中实现

4.知识点的实践

  • 定义一个Person类:name age
  • 提供有参数的构造方法
    *实现 walk eat方法
  • 公务员:salary,看报纸的数量,show
  • 公司职员:salary,tec show
  • 创建多个职员和公务员

首先我们需要创建一个父类,并且实现walk eat方法

class Person{
     String name;
     int age;

     public Person(){}
    public Person(String name,int age){
        this.age=age;
        this.name=name;
    }
    public void wolk(){
        System.out.println(name+"会走路");
    }
    public void eat(){
        System.out.println(name+"会吃饭");
    }
}

然后再来继承Person类,创建Civil Clerk类,并且实现自己的一些方法,和属性

class Civil extends Person{
    private int salary;
    private int count;

    public Civil(String name,int age,int salary,int count){
        super(name,age);
        this.count=count;
        this.salary=salary;
    }
    public void show(){
        System.out.println("name:"+name+" age:"+age+" salary:"+salary+" 看报纸的数量"+count+"种");
    }
}

class Clerk extends Person{
    private int salary;
    private int tec;
    public Clerk(String name,int age,int salary,int tec){
        super(name,age);
        this.salary=salary;
        this.tec=tec;
    }
    public void show(){
        System.out.println("name:"+super.name+" age:"+age+" salary:"+salary+" 会的技术的数量:"+tec+"种");
    }
}

然后我们需要创建许多Civil Clerk类的对象,但是我们需要将这些对象有数组装起来,但是这些对象并不是同一类,那么我们就需要用到多态的知识点,尽管这些是不同的类,但是他们都是继承的同一个类,我们就可以用他们所继承的类来接收。

ArrayList<Person> peoples=new ArrayList();
        Person c1=new Civil("小王",20,5000,3);
        Person c2=new Civil("小里",32,6000,10);
        Person c3=new Civil("小张",40,8000,15);
        Person c4=new Civil("小李",48,9000,20);
        Person c5=new Clerk("jack",20,1000,1);
        Person c6=new Clerk("tim",23,11000,4);
        Person c7=new Clerk("tom",21,13000,6);
        Person c8=new Clerk("merry",26,18000,10);

        peoples.add(c1);
        peoples.add(c2);
        peoples.add(c3);
        peoples.add(c4);
        peoples.add(c5);
        peoples.add(c6);
        peoples.add(c7);
        peoples.add(c8);

接下来我们要做的解释将这些对象信息进行输出,由于这个数组中有不同的类,我们需要在输出时进行判断是哪个类的对象,然后才调用这个类的方法进行输出。

for(Person p:peoples){
            if(p instanceof Civil){
                Civil c=(Civil)p;
                c.show();
                c.eat();
                c.wolk();
            }else{
                Clerk c=(Clerk)p;
                c.show();
                c.eat();
                c.wolk();
            }
        }

最后效果:


NV5{6EBDHAWY``FGQU{L%LY.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容