Java学习六,面向对象

基于 Verilog 的经典数字电路设计(10)三态门 三态门(Triple-State Gate)亦称 “三态输出门”、“三态门输出电路”,是一种重要的总线接口电路,具有高电平、低电平和高阻抗三种输出状态的门电路,不过我们通常在设计中比较少见。   三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑 1)或低电平(逻辑 0),又可以保持特有的高阻抗状态,高阻态相当于隔断状态(电阻很大,相当于开路)。 阅读详情

1.什么是面向对象

                                

                                      

                        

代码如下:

       创建Cat类

package com_imooc.mianxiangduixiang;

/**
 * 创建宠物-猫的类
 */
public class Cat {
    //成员属性:昵称,年龄,体重,品种
    String name;
    int month;
    double weight;
    String species;

    //方法:吃
    public void eat() {
        System.out.println("我是一只小猫,我要吃东西");
    }

    //方法:跑
    public void run() {
        System.out.println("我会跑跑跳跳");
    }

    //方法重载:跑
    public void run(String name) {
        System.out.println(name + "快点跑,老鼠来了");
    }
}

      调用Cat类,也就是实例化Cat,使它变成对象

package com_imooc.mianxiangduixiang;

public class CatTest {
    public static void main(String[] vvv){
        //实例化类
        Cat mycat=new Cat();

        mycat.eat();
        mycat.run();

        mycat.run("小花花");
    }
}

  1.1 对象实例化(new 关键字)

       当我们使用Cat one声明对象的时候,我们只是在栈中开辟了一个为null的对象,此时他没有任何的属性和方法,而new Cat()的时候是在堆中开辟了一个指针为0x0001的空间,他们两个通过"="来传递信息

                       

1.2 构造方法

                                   

                                  

     定义一个Cat类

package com_imooc.mianxiangduixiang;

/**
 * 创建宠物-猫的类
 */
public class Cat {
    //成员属性:昵称,年龄,体重,品种
    String name;
    int month;
    double weight;
    String species;

    //构造方法:无参数
    public Cat() {
        System.out.println("我是没有参数的构造方法");
    }

    //构造方法:有参数
    public Cat(String name, int month, double weight, String species) {
        System.out.println("我是宠物猫" + name);
        System.out.println("今年" + month + "个月");
        System.out.println("体重是" + weight + "kg");
        System.out.println("品种是:" + weight);
    }
}

   实例化,并展示构造方法

package com_imooc.mianxiangduixiang;

public class CatTest {
    public static void main(String[] vvv){
        //实例化类
        Cat mycat=new Cat();

        Cat one=new Cat("大花花",12,30,"英短");
    }
}

1.3 this关键字

                       

                       

    例子:

package com_imooc.mianxiangduixiang;

/**
 * 创建宠物-猫的类
 */
public class Cat {
    //成员属性:昵称,年龄,体重,品种
    String name;
    int month;
    double weight;
    String species;

    //构造方法:无参数
    public Cat() {
        System.out.println("我是没有参数的构造方法");
    }

    //构造方法:有参数
    public Cat(String name, int month, double weight, String species) {
        this();
        this.name = name;
        this.month = month;
        this.weight = weight;
        this.species = species;
    }

    //方法:吃
    public void eat() {
        System.out.println("我是一只小猫,我要吃东西");
    }

    //方法:跑
    public void run() {
        eat();
        System.out.println("我会跑跑跳跳");
    }

    //方法重载:跑
    public void run(String name) {
        System.out.println(name + "快点跑,老鼠来了");
    }
}

    调用:

package com_imooc.mianxiangduixiang;

public class CatTest {
    public static void main(String[] vvv){
        //实例化类
        Cat one=new Cat("大花花",12,30,"英短");

        System.out.println(one.name);
        System.out.println(one.month);
        System.out.println(one.species);
        System.out.println(one.weight);
    }
}

 

2.封装

                          

                          

                          

简单的例子:

package com_imooc.mianxiangduixiang;

public class FengzhuangCat {
    //成员属性:昵称,年龄,体重,品种
    private String name;
    private int month;
    private double weight;
    private String species;

    public void setName(String name) {
        this.name = name;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    public void getname() {
        System.out.println("我是一只name是:" + this.name + "的小猫猫");
    }

    public int getMonth() {
        return this.month;
    }

}

实例化调用

package com_imooc.mianxiangduixiang;

public class CatTest {
    public static void main(String[] vvv) {
        //实例化类
        FengzhuangCat one = new FengzhuangCat();
        //设置属性
        one.setName("花花");
        one.setMonth(88);

        one.getname();
        int month = one.getMonth();
        System.out.println("小猫猫的年龄是:"+month);
    }
}

2.1 利用包进行管理类

                             

                     

        例如:我在一个项目中有两个Cat的类文件,如图:

                         

最后我们调用的位置:

2.2 static关键字

    static所在的方法称之为静态成员,也叫类成员,他有两个特点:

            1.类对象共享;

            2.类加载时产生,销毁时释放,生命的周期长;

例子:

package com_imooc.mianxiangduixiang;

public class FengzhuangCat {
    //成员属性:昵称,年龄,体重,品种
    private String name;
    private int month;
    private double weight;
    private String species;

    public static int price;

    public void setName(String name) {
        this.name = name;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    public void getname() {
        //调用静态的方法
        eat();
        System.out.println("我是一只name是:" + this.name + "的小猫猫,我的售价是:" + price);
    }

    public int getMonth() {
        return this.month;
    }

    //静态方法里面不能调用非静态的方法和变量
    public static void eat() {
        System.out.println("我的售价是" + price);
    }

    public static void run() {
        FengzhuangCat one=new FengzhuangCat();
        one.name="二黑";
        one.getname();
    }
}

调用:

package com_imooc.mianxiangduixiang;

public class CatTest {
    public static void main(String[] vvv) {
        //1.静态方法和属性的调用
        FengzhuangCat one=new FengzhuangCat();
        //调用静态方法的时候直接使用类名调用
        FengzhuangCat.price=100;
        one.setName("白白");
        one.getname();

        FengzhuangCat two=new FengzhuangCat();
        two.setName("黄黄");
        two.getname();

        //2.静态方法中调用实例化的对象
        FengzhuangCat.run();
    }
}

结果:

                       

              代码块

                            

             例如:

package com_imooc.mianxiangduixiang;

public class FengzhuangCat {
    //成员属性:昵称,年龄,体重,品种
    private String name;
    private int month;
    private double weight;
    private String species;

    public static int price;

    //构造代码块(每次实例化一次便输出一次)
    {
        System.out.println("我是构造代码块");
    }

    //静态代码块(不管实例化几次,只会输出一次)
    static {
        System.out.println("我是静态代码块");
    }

    public void setName(String name) {
        this.name = name;
    }

    public void getname() {
        //普通代码块
        {
            System.out.println("我是普通的代码块");
        }
        System.out.println("我是一只name是:" + this.name + "的小猫猫,我的售价是:" + price);
    }

}

实例化:

package com_imooc.mianxiangduixiang;

public class CatTest {
    public static void main(String[] vvv) {
        FengzhuangCat one=new FengzhuangCat();
        //调用静态方法的时候直接使用类名调用
        FengzhuangCat.price=100;
        one.setName("白白");
        one.getname();
    }
}

结果:

                         

2.3 综合案例

                 

Student.java(学生类)
package com_imooc.mianxiangduixiang.fenzhuangtest;

public class Student {

    //属性:学号,姓名,性别,年龄
    private String name;
    private int no;
    private int year;
    private String sex;
    //把类作为一个属性
    private Tie mytie;

    //没有参数新new一个,防止报错
    public Tie getMytie() {
        if (this.mytie == null) {
            this.mytie = new Tie();
        }
        return mytie;
    }

    public void setMytie(Tie mytie) {
        this.mytie = mytie;
    }


    public Student() {
    }

    //构造方法
    public Student(String name, int no, int year, String sex) {
        this.name = name;
        this.no = no;
        this.year = year;
        this.sex = sex;
    }

    //构造方法
    public Student(String name, int no, int year, String sex, Tie mytie) {
        this.name = name;
        this.no = no;
        this.year = year;
        this.sex = sex;
        this.mytie = mytie;
    }

    public String toString() {
        return "学生信息如下:" +
                "名字:'" + name + '\'' +
                ", 学号:" + no +
                ", 年纪:" + year +
                ", 性别:'" + sex + '\'' +
                ", 专业:" + mytie.getName() + '\'' +
                ", 学制:" + mytie.getYear() + '\'' +
                ", 编号:" + mytie.getBianhao() + '\'' +
                '}';
    }

    public String toString(Tie myTie) {
        return "学生信息如下:" +
                "名字:'" + name + '\'' +
                ", 学号:" + no +
                ", 年纪:" + year +
                ", 性别:'" + sex + '\'' +
                ", 专业:" + myTie.getName() + '\'' +
                ", 学制:" + myTie.getYear() + '\'' +
                ", 编号:" + myTie.getBianhao() + '\'' +
                '}';
    }

}
Tie.java(专业类)
package com_imooc.mianxiangduixiang.fenzhuangtest;

public class Tie {
    //属性:学科名称,学科编号,学习年限,学生个数的统计
    private String name;
    private String bianhao;
    private int year;
    private int count = 0;

    public Tie() {
    }


    //构造函数
    public Tie(String name, String bianhao, int year) {
        this.name = name;
        this.bianhao = bianhao;
        this.year = year;
    }

    //方法
    public void setName(String name) {
        this.name = name;
    }

    public void setBianhao(String bianhao) {
        this.bianhao = bianhao;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public String getName() {
        return this.name;
    }

    public String getBianhao() {
        return this.bianhao;
    }

    public int getYear() {
        return this.year;
    }

    public String info() {
        String info = "专业名称:" + this.name + "\n编号:" + this.bianhao + "\n学习年限:" + this.year;
        return info;
    }

    public void add_student(Student stu) {
        if (stu != null) {
            count++;
        }
    }

    public int getCount() {
        return this.count;
    }

}

Main.java

package com_imooc.mianxiangduixiang.fenzhuangtest;


public class fenzhaung {
    public static void main(String[] vvv) {
        Tie one = new Tie("计算机与科学应用", "j0001", 4);
        System.out.println(one.info());

        //第一个学生(实例化的对象作为参数传递)
        Student st1 = new Student("王二狗", 123, 15, "女");
        System.out.println("*************************");
        System.out.println(st1.toString(one));

        //第二个学生(实例化的对象作为参数传递)
        Student st2 = new Student("李二炮", 124, 16, "男", one);
        System.out.println("*************************");
        System.out.println(st2.toString());

        //统计学生的个数
        System.out.println("*************************");
        one.add_student(st1);
        one.add_student(st2);
        System.out.println(one.getCount());
    }
}

 

3.继承

                       

                    

      

                                   

 例子:

父类 animal.java

package com_imooc.mianxiangduixiang.jicheng;

public class animal {
    private String name;    //名字
    private int month;  //月份
    private String species; //品种

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public String getSpecies() {
        return species;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    //吃东西
    public void eat() {
        System.out.println(name + "在吃东西");
    }

}

子类 cat.java

package com_imooc.mianxiangduixiang.jicheng;

public class cat extends animal {
    private double weight; //体重

    public cat() {
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public void info() {
        System.out.println(getName() + "是一只" + getSpecies() + "小猫");
    }

}

子类 dog.java

package com_imooc.mianxiangduixiang.jicheng;

public class dog extends animal {
    private String sex; //性别

    public dog() {
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    //睡觉的方法
    public void sleep() {
        System.out.println("他是一个叫" + getName() + "的小狗,他在睡觉;他已经" + getMonth() + "个月了");
    }


}

test.java

package com_imooc.mianxiangduixiang.jicheng;

public class test {
    public static void main(String[] vvv) {
        //实现猫的实例对象
        cat cc=new cat();
        cc.setName("花花");
        cc.setSpecies("英国短毛");
        cc.info();
        cc.eat();

        System.out.println("*********************************");
        //实现狗的实例对象
        dog dd=new dog();
        dd.setName("小黑");
        dd.setMonth(20);
        dd.sleep();
        dd.eat();
    }
}

3.1 方法重写

    在刚才的例子中,我们的父类animal中有eat这个方法,如果子类比如dog类中也想要写一个属于自己专属的eat方法,那么这个过程叫做方法重写;

                   

                         

             

所以,我们在重写了dog类:

package com_imooc.mianxiangduixiang.jicheng;

public class dog extends animal {
    private String sex; //性别

    public dog() {
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    //睡觉的方法
    public void sleep() {
        System.out.println("他是一个叫" + getName() + "的小狗,他在睡觉;他已经" + getMonth() + "个月了");
    }

    public void eat() {
        System.out.println(getName() + "她怀孕了,孕吐中");
    }

}

最后我们只要实例化dog类,完后调用eat()方法,系统便会调用dog类中重写的方法.

结果展示:

3.2 super关键字

                 

    super代表对父类对象的引用

例如:

animal类

package com_imooc.mianxiangduixiang.jicheng;

public class animal {
    private String name;    //名字
    private int month;  //月份
    private String species; //品种

    public animal() {
        System.out.println("我是父类的构造方法");
    }

    public animal(String name) {
        System.out.println("我是父类带有参数的方法" + name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public String getSpecies() {
        return species;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    //吃东西
    public void eat() {
        System.out.println(name + "在吃东西");
    }

}

dog类

package com_imooc.mianxiangduixiang.jicheng;

public class dog extends animal {
    private String sex; //性别

    public dog() {
        System.out.println("我是dog的无参构造方法");
    }
    public dog(String sex,String name,int month) {
//        this();
        super(name);
        this.sex=sex;
        super.setName(name);
        super.setMonth(month);
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    //睡觉的方法
    public void sleep() {
        eat();
        System.out.println("他是一个叫" + getName() + "的小狗,他在睡觉;他已经" + getMonth() + "个月了");
    }

    public void eat() {
        System.out.println(getName() + "她怀孕了,孕吐中");
    }

}
package com_imooc.mianxiangduixiang.jicheng;

public class test {
    public static void main(String[] vvv) {
        //实现猫的实例对象
        cat cc=new cat();
        cc.setName("花花");
        cc.setSpecies("英国短毛");
        cc.info();
        cc.eat();

        System.out.println("*********************************");
        //实现狗的实例对象
        dog dd=new dog();
        dd.setName("小黑");
        dd.setMonth(20);
        dd.sleep();
        dd.eat();

        System.out.println("*********************************");
        dog ee=new dog("母","小白",500);
        ee.sleep();
    }
}

1.假如我们在dog类中使用eat()方法,得到的结果是:

                        

说明eat()方法用的是本类(也就是dog类自己的)方法,如果说我们希望使用父类animal类的eat()方法,那么必须使用关键字super,如:

 

2.其次,在我们使用构造方法dog的时候,我们想通过继承使用animal的带参数构造方法

               

我们只需要在dog类中的构造方法中,使用super就可以,如图:

                   

 

最后,我们可以看出super很像我们之前的this,这里作出了比较:

                

有一点需要注意的是,在dog类中的有参构造方法中,this()(代表直接调用本类中无参构造方法)和super()不能同时存在.

           

3.3 Object类

                            

               

 

我们列举equals和tostring类来进行说明:

package com_imooc.mianxiangduixiang.jicheng;

public class obiect_test {
    public static void main(String[] vvv) {
        animal one = new animal();
        animal two = new animal();
        animal three = one;

        //1.equals
        //继承于object的equals,指向的指针是否相同
        boolean rel = one.equals(two);
        boolean rel1 = one.equals(three);
        System.out.println("one和two的引用比较" + rel);
        System.out.println("one和two的'=='比较" + (one == two));
        System.out.println("==============================================");

        System.out.println("one和three的引用比较" + rel1);
        System.out.println("one和three的'=='比较" + (one == three));

        System.out.println("==============================================");
        String a = new String("hello");
        String b = new String("hello");
        //方法重写后代表字符的比较
        boolean rel2 = a.equals(b);
        System.out.println("a和b的引用比较" + rel2);
        System.out.println("a和b的'=='比较" + (b == a));

        //2.tostring(输出的内容:'包的位置'@'内存指针')
        System.out.println("one的tostring方法"+one.toString());
        System.out.println("a的tostring方法"+a.toString());
    }
}

3.4 final关键字

         

        

        

 

4.多态

     用一句话来概括下,多态就是同一操作(方法)作用于不同的对象时,可以有不同的解释,产生不同的执行结果。这句话看似简单,实则颇有深意。下面我们来深入理解一多态的意义及如何使用多态。

建立animal.java

package com_imooc.mianxiangduixiang.duotai;

public class animal {

    public animal() {
    }

    //吃东西
    public void eat() {
        System.out.println("动物都在吃东西");
    }

    public void run(){
        System.out.println("任何动物都会跑");
    }

}

dog.java

package com_imooc.mianxiangduixiang.duotai;

public class dog extends animal {

    public dog(){
    }

    //睡觉的方法
    public void sleep() {
        System.out.println("他是一个小狗,他在睡觉");
    }

    public void eat() {

        System.out.println("狗吃肉");
    }

}

cat.java

package com_imooc.mianxiangduixiang.duotai;

public class cat extends animal {

    public cat() {
    }

    public void eat(){
        System.out.println("猫吃鱼");
    }

    public void paly() {
        System.out.println("猫去玩线球");
    }
}

 master.java

package com_imooc.mianxiangduixiang.duotai;

public class master {
    //主人喂了猫以后,猫去玩线球
    //主人喂了狗以后,狗去睡觉觉

    public void feed(cat c){
        c.eat();
        c.paly();
    }

    public void feed(dog d){
        d.eat();
        d.sleep();
    }
}

当我们调用的时候是这样的,

                   

但是这里有一个问题,如果以后要是想编写更多的动物,每次我们都需要在 master.java中重载feed()方法,显然这是不便捷的,当然我们可以使用类的类型转化,先解决feed()的编写问题.

此时,我们只是需要修改master.java,利用instanceof对类的判断,便可以减少了很多的代码量;

package com_imooc.mianxiangduixiang.duotai;

public class master {
    //主人喂了猫以后,猫去玩线球
    //主人喂了狗以后,狗去睡觉觉

    public void feed(animal a) {
        if (a instanceof dog) {
            dog d = (dog) a;
            d.eat();
            d.sleep();
        } else if (a instanceof cat) {
            cat c = (cat) a;
            c.eat();
            c.paly();
        }
    }
}

但是这里只是简化的我们的代码.并没有实现真正的多态,所以我们需要方法重写来实现我们类的多态;

     首先,先修改animal.java

package com_imooc.mianxiangduixiang.duotai;

public class animal{

    public animal() {
    }

    //吃东西
    public void eat() {
        System.out.println("动物都在吃东西");
    }

    public void run(){
        System.out.println("任何动物都会跑");
    }

    public void info() {

    }
}

dog.java

package com_imooc.mianxiangduixiang.duotai;

public class dog extends animal {

    public dog() {
    }

    //睡觉的方法
    public void sleep() {
        System.out.println("他是一个小狗,他在睡觉");
    }

    public void eat() {
        System.out.println("狗吃肉");
    }

    @Override
    public void info() {
        eat();
        sleep();
    }
}

cat.java

package com_imooc.mianxiangduixiang.duotai;

public class cat extends animal {

    public cat() {
    }

    public void eat(){
        System.out.println("猫吃鱼");
    }

    public void paly() {
        System.out.println("猫去玩线球");
    }

    @Override
    public void info() {
        eat();
        paly();
    }
}

master.java

package com_imooc.mianxiangduixiang.duotai;

public class master {
    //主人喂了猫以后,猫去玩线球
    //主人喂了狗以后,狗去睡觉觉

    /**
     * 方案三,通过传入的类型,完后调用本类中info的方法
     * @param a
     */
    public void feed(animal a) {
        a.info();
    }

}

最后调用不变,我们就可以知道,只要是后期添加类中,继承animal类,并重写info()的方法,那么就轻松的实现了多态.

4.1 抽象类和抽象方法   

         在面向对象的概念中,所有的对象都是通过类来描述的,但并不是说所有的类都是用来描述对象的,当一个类中没有包含足够的信息以描绘一个具体的对象时,这样的类就是抽象类。    

                      

抽象类的意义在于:

(1)为其子类提供一个公共的类型(父类引用指向子类对象);
(2)封装子类中的重复内容(成员变量和方法);
(3)将父类设计成抽象类后,既可借由父子继承关系限制子类的设计随意性,在一定程度上避免了无意义父类的实例化。

创建抽象类 animals.java

package com_imooc.mianxiangduixiang.duotai;

//抽象类
public abstract class animals {

    //抽象方法体(在子类中,必须重写抽象类中的方法体,否则会报错)
    public abstract void info();

    public abstract void eat();

}

利用 abs_cat.java来继承animals.java

package com_imooc.mianxiangduixiang.duotai;

public class abs_cat extends animals {

    public abs_cat() {
    }

    public void paly() {
        System.out.println("猫去玩线球");
    }

    @Override
    public void info() {
        eat();
        paly();
    }

    @Override
    public void eat() {

        System.out.println("猫吃鱼");
    }
}

在上面的例子可以看出,我们的抽象类和抽象方法的写法,值得主意的是我们的子类在继承抽象类后,必须重写父类的抽象方法,从而达到了限制子类的设计随意性的目的.

4.2 接口

  我们在实际开发过程中,如果想要创建某些公共代码,使得它们可以被某个接口的所有不同实现所共用,那么接口内部的嵌套类会显得很方便。也就是说,在接口中可以含有内部类。在这里,向大家展示接口中放置普通成员内部类和抽象成员内部类的情况。

接口实现需要用到关键字interface

接口类 Inet.java

package com_imooc.mianxiangduixiang.duotai.jiekou;

public interface Inet {
    void network();
}

接口类 Iphoto.java

package com_imooc.mianxiangduixiang.duotai.jiekou;

/**
 * 具有拍照能力的接口
 */
public interface Iphoto {
    /**
     * 可以当做---接口的抽象方法
     * 接口抽象方法可以不用写abstract关键字
     * 当类要实现接口的时候,是需要实现全部的抽象方法
     */
    public void photo();

    /**
     * 接口中常量不需要在定义public static final
     */
    int price = 100;

    /**
     * 可以当作---接口的静态方法(默认方法)
     * 也可以写成: public static void guangquan(){}
     */
    public default void guangquan() {
        System.out.println("我是一个小光圈");
    }

    public static void a() {
        System.out.println("我是小a");
    }
}

调用类 camera.java

package com_imooc.mianxiangduixiang.duotai.jiekou;

/**
 * 多接口的调用
 */
public class camera implements Iphoto,Inet{

    /**
     * 调用接口中的默认方法default,需要加super
     * 但是调用接口的静态方法不需要
     */
    public void ls(){
        Iphoto.super.guangquan();
        Iphoto.a();
    }

    @Override
    public void photo() {
        System.out.println("相机也是可以拍照的");
    }

    @Override
    public void network() {
        System.out.println("相机不能上网,但是有些是可以的");
    }
}

调用类 phone.java

package com_imooc.mianxiangduixiang.duotai.jiekou;

public class phone implements Iphoto {

    public void game(){
        System.out.println("手机也可以玩游戏的");
    }

    //引入接口后,需要重写方法
    @Override
    public void photo() {
        System.out.println("手机是可以拍照的");
    }
}

main文件

package com_imooc.mianxiangduixiang.duotai.jiekou;

public class jiekou_test {
    public static void main(String[] vvv) {
        //接口可以描述不同的类,具有相似的行为特征
        phone p=new phone();
        p.photo();
        p.game();

        System.out.println("=============================");
        camera c=new camera();
        c.photo();
        c.network();

        System.out.println("=============================");
        Iphoto i=new phone();
        i.photo();
        System.out.println(i.price);
    }
}

4.3 内部类

                               

                          如:

                                                                                   

 4.3.1 成员内部类

                             

people.java

package com_imooc.mianxiangduixiang.duotai.neibulei;

//外部类
public class people {
    int age;

    public people(int age) {
        this.age = age;
    }

    public people() {
    }

    public void getinfo() {
        System.out.println("我是一个年龄为:" + age + "的老头");
    }

    //定义内部类的输出
    public heart getheart() {
        return new heart();
    }

    //成员内部类
    class heart {
        //调用外部类的参数
        public String beat() {
            return people.this.age + "心在跳动";
        }
    }
}

调用的test.java

package com_imooc.mianxiangduixiang.duotai.neibulei;

public class neibu_test {
    public static void main(String[] args) {
        people p=new people(55);
        p.getinfo();

        //1.内部类的调用
        people.heart h=new people().new heart();
        System.out.println(h.beat());

        //2.内部类的调用
        people.heart h1=p.getheart();
        System.out.println(h1.beat());
    }
}

4.3.2 静态内部类

person.java

package com_imooc.mianxiangduixiang.duotai.neibulei;

//外部类
public class person {
    int age;

    public person(int age) {
        this.age = age;
    }

    public person() {
    }

    public void getinfo() {
        System.out.println("我是一个年龄为:" + age + "的老头");
    }

    //定义内部类的输出
    public heart getheart() {
        return new heart();
    }

    //定义静态方法
    public static void eat() {
        System.out.println("人是要吃饭的");
    }

    //定义普通方法
    public void sleep() {
        System.out.println("人是要睡觉的");
    }

    //成员内部类
    static class heart {
        //调用外部类的参数
        public String beat() {
            return new person().age + "心在跳动";
        }

        //内部调用外部的静态方法
        public String eat() {
            person.eat();
            return new person().age + "心在跳动";
        }

        //内部调用外部的普通方法
        public void sleep() {
            new person().sleep();
        }

        static void info() {
            System.out.println("我是内部类的静态方法");
        }
    }
}

静态内部类的调用

package com_imooc.mianxiangduixiang.duotai.neibulei;

public class neibu_test {
    public static void main(String[] args) {
        /**
         * 静态内部类的调用
         */
        person p1=new person();
        p1.sleep();

        //1.内部静态类的调用
        person.heart j=new person.heart();
        System.out.println(j.eat());

        //2.内部静态类的调用
        System.out.println(new person.heart().eat());

        //3.调用内部静态类的静态方法
        person.heart.info();


    }
}

4.3.3 方法内部类

                     

package com_imooc.mianxiangduixiang.duotai.neibulei;

public class fangfa {
    int age;

    public Object getheart(){
        //方法内部类
         class heart {
            //调用外部类的参数
            public String beat() {
                return new jingtai().age + "心在跳动";
            }

            //内部调用外部的静态方法
            public String eat() {
                jingtai.eat();
                return new jingtai().age + "心在跳动";
            }

            //内部调用外部的普通方法
            public void sleep() {
                new jingtai().sleep();
            }

            public String info() {
                return "我是方法体中的内部类";
            }
        }
        return new heart().info();
    }

}
package com_imooc.mianxiangduixiang.duotai.neibulei;

public class neibu_test {
    public static void main(String[] args) {
        /**
         * 方法体中的内部类
         */
        fangfa f = new fangfa();
        f.age=888;
        f.getheart();

    }
}

 

 

 

 

 

Google Earth Engine(GEE)——使用归一化燃烧指数 (NBR) 绘制地表烧伤严重程度图 归一化燃烧指数(Normalized Burn Ratio, NBR)是一种遥感指标,用于评估野火或烧伤地面后的植被恢复情况。NBR能增强较大范围的火灾区域,如大于200公顷。它是通过比较远红外波段 (SWIR) 和近红外波段 (NIR) 的反射率来计算的。SWIR波段测量烧伤地面的反射率,NIR波段测量没有受到烧伤影响的植被的反射率。NBR的计算公式为:NBR =(NIR-SWIR)/(NIR + SWIR)。其中,NIR为近红外波段,SWIR为短波红外波段。 阅读详情

相关推荐

边缘AI硬件风向:从专用芯片到端侧大模型

边缘AI硬件正呈现五大发展趋势:专用AI加速芯片(如华为昇腾、谷歌EdgeTPU)凭借高能效比成为主流;端侧大模型催生支持Transformer架构的新硬件需求;存算一体技术突破内存墙限制;FPGA和可重构计算提供灵活性;异构集成与Chiplet技术实现模块化设计。这些发展需要配套软件工具链支持,未来边缘设备将演变成具备本地智能的"智能体",竞争焦点转向算力、能效、易用性和成本的多维平衡。

qq_37027335的博客 348

java 生成统计报表_java应用监控之CAT简介

CAT简介CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。开源地址:https://github.com/dianping/cat/CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等...

weixin_36187176的博客 701

高德地图开放平台Web服务API调用全解析:从申请Key到获取POI数据的完整流程

本文详细解析高德地图开放平台Web服务API的合规使用流程,从开发者账号注册、Key类型选择到POI数据采集方案构建。重点介绍文本搜索接口的三种查询模式及高级筛选技巧,提供配额管理与性能优化方案,并分享商业应用场景实战经验,帮助开发者合法高效获取POI数据。

weixin_26950847的博客 1352

开发中Cat是什么?

所有Type汇总报表。

qq_45477639的博客 1261

FlinkCDC数据同步Bug——同步性能由于写入并行度限制无法提升问题的解决

使用FlinkCDC进行数据同步时,出现增量阶段写入并行度强制为1导致整体同步性能无法提升问题的解决方案

csdn_lan的博客 2080

记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL

【代码】记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL。

m0_74824002的博客 843

Java 构造函数

构造函数 之后有提到过构造函数始终和new关键字一起使用对对象进行初始化 什么是构造函数: 构造函数是对初始化对象的函数称呼,它的作用就是构造一个对象,然后对他进行初始化 public class Constructors { public static void main(String[] args) { // 类名( ):这就是构造函数,创建对象,初始化对象 ...

lingxuanyumu的博客 492

Virtual Hard Disk version 2 (VHDX) 文件格式详解

VHDX 镜像格式详解 0. References windows github 1. Overview Microsoft 虚拟化产品中常用的映像格式是虚拟硬盘版本 2 (VHDX) 映像格式。该规范基于可用文档,并通过分析测试数据进行了增强。 VHDX 镜像格式种类 固定硬盘镜像 动态硬盘镜像 差异硬盘镜像 VHDX 镜像文件由以下元素构成: file (type) identifier 2x image headers 2x region tables log or metadata journ

圣三一 2697

springboot整合cat

Cat是基于Java开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务• CAT作为服务端项目基础组件,提供了java, c/c++, node, python, go等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。

weixin_48421942的博客 1353

结构光相移法-多频外差原理与实践

结构光相移法是一种常用的三维形貌测量技术,它通过对投射到目标物体上的结构光进行相位调制和解调,实现对物体表面的三维重建。其中,多频外差原理是结构光相移法的核心原理之一,通过使用不同频率的结构光来实现相位测量,并可以提高测量精度和抗干扰性能。结构光相移法的多频外差原理是一种常用的三维形貌测量技术,它通过使用多个不同频率的结构光进行相位调制和解调,实现对物体表面的三维重建。本文介绍了多频外差原理的原理和实践应用,并提供了相应的Python源代码,希望对读者理解和应用结构光相移法有所帮助。

CodeByte的博客 737

CVPR 2023 中的半监督学习: FixMatch 的升级版 UniMatch

我们首先回顾下发表在 NeurIPS 2020 上的 FixMatch: Simplifying Semi-Supervised Learning with Consistency and Confidence,FixMatch 是一种更轻量的半监督分类方法。如下图所示,FixMatch 首先使用模型(带标签数据训练后的)对弱增强的未标记图像进行预测,生成伪标签。对于给定的图像,只有在模型产生高置信度的预测时,伪标签才会被保留。然后,在输入同一图像的强增强版本时,训练模型预测伪标签。

NJU phd 在读。 2634

java---面向对象

面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想(OOP)是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想(POP),强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。 面向对象的三大特征 封装(Encapsulation)

xuanxuan9911的博客 625

1、Ka频段双极化低剖面卫通相控阵天线

设计了双馈口叠层十字缝隙耦合天线,采用“双线极化天线 +旋转馈电 + 移相控制”架构,采用双馈口的叠层十字缝隙耦合天线,并以 2 x2 阵列为主体,旋转排布实现二次圆极化,同时极化可切换,通过多层 PCB 工艺实现天线层、控制/电源层功分网终层、芯片层一体化集成,研制出 64 阵元的圆极化可切换发射天线,测试结果表明:天线工作 频段为 27.5 ~31 GHz,可实现60°扫描,法向轴比

qq_43416206的博客 4370

Java学习六—面向对象

Java 是一种面向对象编程语言,其核心思想是面向对象编程(Object-Oriented Programming,OOP)。 面向对象编程是一种程序设计范式,它将数据与操作数据的方法(函数)捆绑在一起,以对象的形式呈现,从而使程序更容易理解、灵活和可维护。

qq_17153885的博客 878

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java学习之面向对象六

###01eclipse快捷键 * A:  Ctrl+T:查看所选中类的继承树 例如,在下面代码中,选中Teacher类名,然后按Ctrl+T,就会显示出Teacher类的继承关系 * B: 查看所选中方法的源代码 Ctrl+滑动鼠标点击方法名,或者选中方法名后,按F3键查看所选中方法的源代码。 ###02java中的文档注释和制作 * A: 在eclipse使用时,可以配...

diaogu9242的博客 126

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【Java】Java学习(六)—— 面向对象思想

上一篇: Java学习(五)—— 方法和数组 第十五部分 面向对象思想 15.1 面向对象思想概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一.

伍陆壹柒 300

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java基础学习六之面向对象

1.什么是对象 程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集合 面向对象思想: 一切客观存在的事物都是对象,万物皆对象。 任何对象,一定具有自己的特征和行为。 对象就是特征加行为 2.类与对象 程序中的模板,称之为“类”。 通过程序模板创造出来的实体,称之为“对象”。 2.1 类的定义 简单的说类就是由类名,属性,方法组成 2.2 对象的创建 相...

qq_41905827的博客 144

java基础学习(六):面向对象

6 类与对象   Java是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用变量。所有类都是引用变量。 6.1 定义类   面向对象的程序设计过程中有两个重要概念:类(class)和对象(object,也被称为实例,instance),其中类是某一批对象的抽象,可以把类理解成某种概念;对象才是一个具体存在的实体。 6.1.1 定义类的简单语法格式如下: [修饰符] class 类名 { 零到多个构造器定义... 零到多个成员变量.

Auraros的博客 488

JAVA 学习模块六: 面向对象

面向过程与面向对象1.面向过程与面向对象1.面向过程:强调的是过程,即动作。(c语言:以函数体现,然后对函数调用)2.面向对象:强调的是对象(实体)。(将过程进行封装)(c++,java,c#)

ZHAOLEI5911的博客 691

Java学习(六)面向对象概述、封装

Java学习(六)面向对象概述、封装 我们来回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。 那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。 文章目录Java

str125757855的博客 135

Java学习笔记(六):面向对象① —— 认识面向对象

文章目录面向过程 & 面向对象什么是面向对象类与对象的关系面向对象的思想概述          面向过程 & 面向对象    面向过程思想: 强调的是功能的行为,以函数为最小单位,考虑怎么做 步骤清晰简单,第一步做什么,第二步做什么… 面向过程适合处理一些较为简单的问题    面向对象思想: 强调具备了功能的对象,以类/对象为最小单位,考虑谁来做 物以类聚,分类的思维模式,思考解决问题首先需要哪些分类,然后对这些分类进行单独思考。最后才对某个分类下的细节进行面向过程的思考。 面向对象适

苍夜月明的博客 376

JAVA学习笔记六---面向对象

JAVA学习笔记六---面向对象 面向对象四大特征 抽象、封装、继承、多态 6.1 抽象 抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象的哪些属性和行为,并不关注这此行为的细节是什么。 抽象是把一个事物概念化的过程,包括属性(静态特征),方法(动态特征),类,类和对象的转变。 比...

Jonh_的博客 319

Java学习笔记(六)面向对象编程

Java学习笔记(六)面向对象编程

KuriyamaM的博客 130

【JAVA基础】重新系统学习Java(六)面向对象

系统学习Java中的面向对象,如何设计使用对象,构造器是什么,如何进行封装

m0_64501863的博客 341

Java学习笔记 六、面向对象编程中级部分

Java学习笔记 六、面向对象编程中级部分

qq_43681634的博客 454

java学习笔记(六)--面向对象

Day06笔记 面向对象 面向过程:他是一种编程思想,强调的是做事的步骤和方法,如何从第一步做到最后一步得到想要的结果。 面向对象:他也是一种编程思想,强调的谁来做事情,强调的是结果。 举个例子:洗衣服 面向过程:首先找来盆,倒入水和洗衣粉,放入衣服开始揉搓,使用清水洗干净 然后拧干,晾出去。 面向对象: 找到洗衣机,把衣服放进去,按按钮,最终衣服就洗完了找到女朋友,把脏衣服给她,直接得到干净的...

weixin_44060031的博客 507
上一篇: Java学习五,方法
下一篇: Java学习七,异常处理
yí無所冇
博客等级 码龄9年 78粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值