• day08


    08.01 面向对象(代码块的概述和分类)
      A.代码块概述
      在Java中,使用{}括起来的代码被称为代码块
      B.代码块分类
      根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解
      C.常用代码块的应用
      a.局部代码块
        在方法中出现:限定变量声明周期,及早释放
      b.构造代码块
        在类中方法外出现:多个构造方法中相同的代码存放在一起,每次调用,构造都执行,并且在构造方法之前执行
        如果我们想在每一个方法中调用study()方法,可以将其调用方式写道构造代码块里面

    public class day08_01 {
        //如果我们想在每一个方法中调用study()方法,可以将其调用方式写道构造代码块里面
        public static void main(String[] args) {
            {
                int x =10;           //限定变量的声明周期
                System.out.println(x);
            }
            Student s1 = new Student();    //空参
    
            Student s2 = new Student("张三",23);
        }
    
    }
    class Student{
        private String name;
        private int age;
        
        public Student(){
            //study()
            System.out.println("我是空参");
        }
        public Student(String name,int age){
            //study()
            System.out.println("我是有参");
            this.name = name;
            this.age = age;
        }
        //
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return name;
        }
        public void setAge(int age){
            this.age = age;
        }
        public int getAge(){
            return age;
        }
        //构造代码块优先构造方法前执行
        {
    //        System.out.println("我是构造代码块");
            study();
        }
        public void study(){
            System.out.println("学生学习");
        }
    }
    View Code

      c.静态代码块
        在类中方法外出现,加了static修饰
        在类中方法外出现,并加上static修饰,用于始类进行初始化,在加载的时候就执行,只执行一次

    public class day08_01 {
        //如果我们想在每一个方法中调用study()方法,可以将其调用方式写道构造代码块里面
        public static void main(String[] args) {
            {
                int x =10;           //限定变量的声明周期
                System.out.println(x);
            }
            Student s1 = new Student();    //空参
    
            Student s2 = new Student("张三",23);
        }
    
    }
    class Student{
        private String name;
        private int age;
        
        public Student(){
            //study()
            System.out.println("我是空参");
        }
        public Student(String name,int age){
            //study()
            System.out.println("我是有参");
            this.name = name;
            this.age = age;
        }
        //
        public void setName(String name){
            this.name = name;
        }
        public String getName(){
            return name;
        }
        public void setAge(int age){
            this.age = age;
        }
        public int getAge(){
            return age;
        }
        //构造代码块优先构造方法前执行
        {
    //        System.out.println("我是构造代码块");
            study();
        }
        public void study(){
            System.out.println("学生学习");
        }
        //静态代码块只执行一次,随着类的加载而加载
        static{
            System.out.println("我是静态代码块");
        }
    }
    View Code

      一般用于加载驱动

    08.03 面向对象(继承案例演示)
      A.继承(extend)
      类与类之间,子父类
      B.继承案例演示
      动物类,猫类,狗类
      定义两种属性(颜色,腿的个数)
      C.案例演示
      继承狗
      D.案例演示
      使用继承后

    public class day08_03 {
        public static void main(String[] args) {
            Cat c = new Cat();
            c.color = "flower";
            c.leg =4;
            c.eat();
            c.sleep();
            System.out.println(c.leg + "..." + c.color);
        }
    
    }
    class Animal{
        String color;
        int leg;
        public void eat(){
            System.out.println("吃饭");
        }
        public void sleep(){
            System.out.println("睡觉的功能");
        }
    }
    class Cat extends Animal{
        
    }
    class Dog extends Animal{
        
    }
    View Code

    08.04 面向对象(继承的好处和弊端)
      A.继承的好处
      a.提高了代码的复用性
      b.提高了代码的维护性
      c.让类与类之间产生了关系,是多态的前提
      B.继承的弊端
      类的耦合性增强了
      开发的原则:高内聚,低耦合
        耦合:类与类的关系
        内聚:就是自己完成某件事的能力

    08.05 面向对象(继承的特点)
      A .Java中类的继承特点
      a.Java只支持单继承,不支持多继承(一个儿子只有一个爸)
      b.java支持多层继承
      B.案例演示
      Java继承特点
      如果想用这个体系的所有功能用最底层的类创建对象
      如果想看这个体系的共性功能,看最顶层的类

    //多层继承,不能多继承
    public class day08_005 {
        public static void main(String[] args) {
            DemoC c = new DemoC();
            c.show();
        }
    
    }
    class DemoA{
        public void show(){
            System.out.println("DemoA");
        }
    }
    class DemoB extends DemoA{
        public void show(){
            System.out.println("DemoB");
        }
    }
    class DemoC extends DemoB{
        public void show(){
            System.out.println("DemoC");
        }
    }
    View Code

    08.06 面向对象(继承中构造方法的关系)
      A.继承的注意事项
      a.子类不能继承父类的私有方法
      b.子类不能继承父类的构造方法
      c.不要为了部分功能而去继承
        项目经理 姓名 工号 工资 奖金
        程序员 姓名 工号 工资
      B.什么时候使用继承
      继承其实体现的是一种继承关系:“is a”
    08.07 面向对象()
      A.案例演示
      a.不同名的变量
      b.同名的变量
    08.08 面向对象(this和super的区别和应用)
      A.this和super都代表了什么
      this 代表当前对象的引用,谁来调用我,我就代表谁
      super 调用当前父类的引用
      B.this和super的区别
      a.调用成员变量
        this.成员变量 调用本类的成员变量,可以调用父类的成员变量
        super.成员变量 调用父类的成员变量
      b.调用构造方法
        this(...) 调用本类的构造方法
        super(...) 调用父类的构造得到
      c.调用成员方法
        this.成员方法 调用本类的成员方法,可以调用父类的方法
        super.成员方法 调用父类的成员方法

    public class day08_07 {
        public static void main(String[] args){
            Son1 s = new Son1();
            s.print();
        }
    }
    /*A.案例演示
        a.不同名的变量
        b.同名的变量*/
    class Father1{
        int num1 =10;
        int num2 = 30;
    }
    class Son1 extends Father1{
        int num2 = 20;              //同名的变量,,就近原则
        
        public void print(){
            System.out.println(this.num1);   //this可以调用子类的,也可以调用父类的
            System.out.println(num2);
            System.out.println(super.num2);  //super调用父类的
        }
    }
    View Code

    08.09 面向对象(继承中构造方法的关系)

      A.案例演示
      子类中所有的构造方法默认都会访问父类中空参的构造方法
      B.为什么呢?
      因为子类会继承父类中的数据,可能还会使用父类的构造方法
      所以,子类初始化之前,一定要先完成父类数据的初始化
      其实:
        每一个构造方法的第一条语句默认都是:super()在这里简单提一句,object类,

    public class day08_09 {
        //子类中所有的构造方法默认都会访问父类中空参的构造方法 
        public static void main(String[] args) {
            Son9 s = new Son9();
            
        }
    
    }
    class Father9{
        public Father9(){
            System.out.println("Father构造方法");
        }
    }
    class Son9 extends Father9{    //子类继承父类
        public Son9(){
    //        super();               //隐藏该语句,用来访问父类中的空参构造
            System.out.println("Son的构造方法");
        }
    }
    
    运行结果:
     Father构造方法
     Son的构造方法
    View Code

    08.10 面向对象(继承中构造方法的注意事项)
      A.案例演示
      父类没有无参构造方法,子类怎么办
        super()
        this()
      B.注意事项
      super(...)或者this(...)

    public class day08_10 {
        /*   A.案例演示
                  父类没有无参构造方法,子类怎么办
                      super()
                      this()        
         */
        public static void main(String[] args) {
            Son10 s1 = new Son10();
            System.out.println(s1.getName()+"..."+s1.getAge());
            System.out.println("----------------");
            Son10 s2 = new Son10("张三",23);                           //第1部
            System.out.println(s2.getName()+"..."+s2.getAge());    //第5部
        }
    }
    class Father10{
        private String name;                                        //第4部
        private int age;
        //2.空参,有参构造方法
        public Father10(){     //此处隐藏了super(),先输出父类空参构造
            System.out.println("Father空参构造");
        }
        public Father10(String name,int age){                        //第3部
            this.name = name;
            this.age=age;
            System.out.println("Father有参构造");
        }
        //set,get方法
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }
    //子继承父
    class Son10 extends Father10{
        public Son10(){
            //super("王五",25);                //调用父类的构造方法
            this("王五",25);                 //调用本类的构造方法,就是下面的有参构造Son10(String name,int age)
            System.out.println("Son 空参构造");
        }
        public Son10(String name,int age){                           //第2部
            super(name,age);                        //super进行访问
            System.out.println("Son 有参构造");
        }
    }
    
    运行结果:
    Father有参构造
    Son 有参构造
    Son 空参构造
    王五...25
    ----------------
    Father有参构造
    Son 有参构造
    张三...23
    View Code

    08.11 面向对象(继承中的面试题)

    class day08_11 {
        public static void main(String[] args){
            Zi z = new Zi();
            z.show();
        }
    }
    class Fu{
        public int num = 10;
        public Fu(){      //调用该构造方法是隐藏super()
            System.out.println("fu");
        }
    }
    class Zi extends Fu{
        public int num = 20;
        public Zi(){
            System.out.println("zi");
        }
        public void show(){
            int num = 30;
            System.out.println(num);
            System.out.println(this.num);
            System.out.println(super.num);
        }
    }
    
    运行结果是:
    隐藏了super()方法
    fu
    zi
    30
    20
    10
    View Code
    /*
     1.jvm调用了main方法,main进栈
     2.遇到Zi22 z = new Zi22();会将Fu.class和Zi.class分别加载进内存,再创建对象,当Fu.class加载进内存
         父类的静态代码块会随着Fu.class一起加载,当Zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载
         第一个输出,静态代码块Fu,第二个输出,静态代码块Zi
     3.走Zi类的构造方法,因为Java中是分层初始化的,先初始化父类,再初始化子类,先走父类构造,但在执行父类构造时,发现,父类有构造代码块,构造代码块是
        优先于构造方法执行,第三个输出构造代码块Fu,第四个输出构造代码块Zi
     4.Fu类初始化结束,子类初始化,第五个是构造代码块zi,构造方法*/
    public class day08_12 {
        public static void main(String[] args) {
            Zi22 z = new Zi22();
        }
    }
    class Fu22{
        static{
            System.out.println("静态代码块Fu");
        }
        {
            System.out.println("构造代码块Fu");
        }
        public Fu22(){
            System.out.println("构造方法Fu");
        }
    }
    class Zi22 extends Fu22{
        static{
            System.out.println("静态代码块Zi");
        }
        {
            System.out.println("构造代码块Zi");
        }
        public Zi22(){
            System.out.println("构造方法Zi");
        }
    }
    View Code

    08.12 面向对象(继承中成员的方法关系)
    A.案例演示
      a.不同名的方法
      b.同名的方法

    /*
    A.案例演示
          a.不同名的方法
          b.同名的方法*/
    public class day08_12 {
        public static void main(String[] args) {
            Son12 a = new Son12();
            a.print();
            a.method();
        }
    }
    class Father12{
        public void print(){
            System.out.println("Fu print");
        }
    }
    class Son12 extends Father12{
        public void method(){
            System.out.println("Zi print");
        }
        public void print(){               //子父类出现相同的方法
            super.print();                    //如果还想调用父类的方法,用super.方法名进行调用
            System.out.println("Zi print");
        }
    }
    运行结果:
    Fu print
    Zi print
    Zi print
    View Code

    08.13 面向对象(继承中成员方法关系)
      A.什么是方法重写
      重写:子父类出现了一模一样的方法
      B.方法重写的应用
      当子类需要父类的功能,而子类又有自己的特点,可以重写父类的方法
      C.案例演示
      定义一个手机类

    public class day08_13 {
        public static void main(String[] args) {
            IOS8 i =new IOS8();
            i.siri();
            i.call();          //直接调用父类的方法
        }
    
    }
    class IOS7{
        public void call(){
            System.out.println("call Phone");
        }
        public void siri(){
            System.out.println("speak English");
        }
    }
    class IOS8 extends IOS7{
        public void siri(){
            System.out.println("speak Chinese");
            super.siri();     //调用父类的
        }
    }
    View Code

    08.14 面向对象(方法重写的注意事项)
      A.方法重写注意事项
      a.父类中私有方法不能被重写
        因为父类私有方法子类根本无法继承
      b.子类重写父类方法时,访问权限不能更低
        最好一致
      c.父类静态方法,子类也必须通过静态方法进行重写
        其实算不上方法重写,但是现象的确如此,至于为什么算不上,多态会讲
      B.案例演示
    08.15 面向对象(方法重写的面试题)
      A.方法重写的面试题
      override和overload的区别
      overload可以改变返回值类型,只看参数列表
      override,子类出现了和父类中方法声明一模一样的方法,与返回值有关,返回值必须是一致的

    08.16 面向对象(使用继承前的学生和老师案例)
      A.案例演示
      使用继承前的学生和老师案例
        属性:姓名 年龄
        行为:吃饭
      老师有特有的方法:讲课
      学生有特有的方法:学习

    public class day08_16 {
        public static void main(String[] args) {
            Student16 s1 =new Student16();            //调用的时空参构造,进行赋值
            s1.setName("张三");
            s1.setAge(23);
            System.out.println(s1.getName()+"..."+s1.getAge());
            s1.eat();
            s1.study();
            System.out.println("-------------------");
            Student16 s2= new Student16("李四",24);
            System.out.println(s2.getName()+"..."+s2.getAge());
            s2.eat();
            s2.study();
        }
    }
    /*属性:姓名 年龄
        行为:吃饭
        老师有特有的方法:讲课
        学生有特有的方法:学习*/
    class Person{
        private String name;
        private int age;
        //空参,有参构造
        public Person(){}
        public Person(String name,int age){    
        }
        //set,get
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        //方法
        public void eat(){
            System.out.println("eat");
        }
        public void study(){
            System.out.println("study");
        }
    }
    class Student16 extends Person{
        public Student16(){
        }
        public Student16(String name,int age){
            super(name,age);
        }
        public void study(){
            System.out.println(this.getName()+"student study");  //this.getName()调用父类的变量
        }
    }
    class Teacher extends Student16{
        public Teacher(){}
        public Teacher (String name,int age){
            super(name,age);
        }
        public void teach(){
            System.out.println("teach");
        }
    }
    View Code

    08.17 面向对象(使用继承前的学生和老师案例)
      A.案例演示
      使用继承前的学生和老师案例
        属性:姓名 年龄
        行为:吃饭
       老师有特有的方法:讲课
       学生有特有的方法:学习

    public class day08_18 {
        public static void main(String[] args) {
            Cat18 c1 = new Cat18("花",4);
            System.out.println(c1.getColor() + "..." +c1.getLeg());
            c1.eat();
            c1.catchMouse();
            Dog18 d1 = new Dog18();
            System.out.println(d1.getColor()+"..."+d1.getLeg());
            d1.eat();
            d1.lookhouse();
        }
    }
    class Animal18{
        private String color;
        private int leg;
        //
        public Animal18(){}
        public Animal18(String color, int leg){
            this.color = color;
            this.leg = leg;
        }
        //
        public String getColor() {
            return color;
        }
        public void setColor(String color) {
            this.color = color;
        }
        public int getLeg() {
            return leg;
        }
        public void setLeg(int leg) {
            this.leg = leg;
        }
        //
        public void eat(){
            System.out.println("eat");
        }
    }
    class Cat18 extends Animal18{
        public Cat18(){}
        public Cat18(String color,int leg){
            super(color,leg);
        }
        public void eat(){
            System.out.println("Cat eat fish");
        }
        public void catchMouse(){
            System.out.println("catch mouse");
        }
    }
    class Dog18 extends Animal18{
        public Dog18(){}
        public Dog18(String color,int leg){
            super(color,leg);
        }
        public void eat(){
            System.out.println("Cat eat fish");
        }
        public void lookhouse(){
            System.out.println("catch mouse");
        }
    }
    View Code

    08.18 面向对象(猫狗案例分析,实现及测试)
      A.猫狗案例分析
      B.案例演示
      猫狗案例继承版
        属性:猫的颜色,腿的个数
        行为:吃饭
      猫特有的行为:抓老鼠catchMouse
      狗特有的行为:看家 look Home
    08.19 面向对象(final关键字修饰类,方法以及变量的特点)
      A.final概述
      B.final修饰特点
      修饰类,类不能被继承
      修饰变量,变量就变成了常量,只能被赋值一次
      修饰方法,方法不能被重写
     C.案例演示
      final修饰特点
    08.20 面向对象(final关键字修饰局部变量)
      A.案例演示
      方法内部或者方法声明上都演示一下
      基本类型,是值不能被改变
      引用类型,是地址不能被改变,对象中的属性可以改变
    08.21 面向对象(final修饰变量的初始化时机)
      A.final修饰变量的初始化时机
      B.案例演示
    08.22 zongjie

  • 相关阅读:
    java各种框架的比较,分析
    HTTP请求响应码
    jersey获取各个参数的总结
    web项目中各种路径的获取
    netsh学习
    解决sqlplus: command not found
    win10 提速
    解决win10 64位系统可用2.99g
    Windows10关闭SearchUI.exe进程的方法
    msf payload
  • 原文地址:https://www.cnblogs.com/chengxiaofeng/p/10391066.html
Copyright © 2020-2023  润新知