JAVAday18

1.继承: 
   为什么要学习继承: 
   1.继承面向对象的三大特性之一,继承可以帮助我们减少代码量
        提高程序的延展性;
 java中如何实现继承?
   extends关键字; java只支持 单继承(一个类只可以有一个父类)
     但是可以多重继承, 
  一个子类继承了一个父类, 那么久拥有了 父类的所有的公共资源,
  但是私有属性 ,获取不到, 必须提供 公共的属性的访问器,     

 继承中构造器可以被继承吗?不可以,但是必须被子类调用,
 默认调用的是 super(); 没有无参数的, 就手动调用super(1,2);

 方法的重写: @Override 
    在继承中, 子类重写了父类的方法,方法名相同, 参数列表相同,返回值相同 
 
 重载:Overload

2.抽象类: 存在意义就是用来被继承的
    体现面向对象的什么特性?
    抽象类是 类的 半成品;  功能的实现
    
   有抽象方法的类 一定是 抽象类, 
   抽象类中 不一定有抽象方法, 
 
 *** 不能被 new , 有构造器, 目的就是用来  子类调用的 super();

  public abstract A extends B{
  }

3.final: 最终的,最后的
  
  作用: 修饰属性, 修饰方法, 修饰类
       1.常量,一般与 static 连用 ,静态常量
             public static final Integer PAGE_SIZE = 60;       
final修饰的变量 有两种赋值方式:
  1.= 赋值
  2.构造器赋值    
    public final Integer PAGE_SIZE;
    
    public B(){
        PAGE_SIZE = 89;
    } 
    
4.接口:
    接口代表 完全抽象:
    
接口  ----->  抽象类 ----->   类     ----->  对象    
完全抽象        半抽象              概念               具体

接口作用: 用于程序的功能设计,用来被实现的
   用interface 代表
   
    public interface Xxx{
          全都是 抽象方法
           public abstract void run();    
    }
    
    没有, 不能new 对象

 接口和 接口之间是什么关系? 
   继承关系, 
 接口和类之间是什么关系? 
  实现关系  implements   
   
 一个类 可以实现多个接口
 一个接口可以继承 多个接口

5.多态
   什么是多态?  有多态的前提 是 必须是 继承关系
    在程序中,同一种事物 的 不同中表现形态;
    例如: Animal     
         Cat
         Dog
    is a
    extends     

代码中体现多态的形式有几种? 
 1.Animal a = new Dog(); 向上     eat
     
     a.重写方法();
     
      if(a instanceof Dog){
          Dog dog = (Dog)a; 向下
          dog.eat();
      }    
  
      子类的对象 指向了 父类的 类型
      父类的类型 指向了 子类对象
      
  向上转型,  向下转型的问题
 cast up     cast down
 
 编译时类型,     运行时类型
  
 2.接口  b = new 接口的实现类();     接口 不能 new 
 3.方法的入参: 
       Hero  Pet
       
       public void follow(Pet pet){
       
       }
 
 B b = new A();
   
   b.eat();
 C extends B    解耦
 
 java提供了 特性  健壮性
 
 ===============================================
程序运行时出现的问题: 就是异常 
  1.数组下标越界异常:  IndexArrayOutOfBoundsException
  2.空指针异常: NullPointerException
  3.数学异常: ArthmeticException
  4.类型转换异常:  ClassCastException
 
 动态绑定技术: 就是多态
=====================================================
对象数组: 
  数组是 引用 数据类型, 容器存储多个数据 

数组的特点: 
 1、数组长度一旦确定 不能改变
 2、数组根据下标来 存取元素 , 下标 从0 开始 到 length - 1
 3、数组可以存储重复元素
 4、数组 只可以存储相同数据类型
 
 byte, short ,int ,long ,double ,float , boolean , char

1.必须会创建对象数组
2.回想对象数组中 赋值
3.根据循环 来操作 对象的 基本信息, 
--------------------------------------------------
访问修饰符: 权限访问问题
             
                      当前类     当前包    当前包下子类,有继承        不同包,非继承关系
  pubilc  公共的             √           √            √                    √           
  
  protected 受保护的     √       √              √                 ×
  
  default/ friendly  默认  不在同一个包 就是不行   √     √               x                  x
  
  private 私有化的       √       ×           ×                     ×    

包: package : 统一管理 类的; 创建包的规范 组织名反写

    www.alibaba.com
    
----------------------------------------------------
1.单例模式:  单例设计模式                 :  23套

  单  :单个 
  例:  new 
   
  只能有一个对象

单例设计模式的核心: 
 1、私有构造器
 2、静态的私有属性
 3、静态的公共方法

2.枚举enum
     


3.内部类

4.类和类之间的关系

这里面的备注部分要多加注意,零碎的小知识点都是我这几天面向对象学习当中忽略的问题

ok 多态还是 父类 变量名 = new 子类;

在编译的时候的是父类,运行的时候是按照子类来的,所以我们想要调用子类的方法,必须要instandsof判断后强制向下转型。

//如果是静态的,调取方式应该是类名.变量名,而不是静态的时候则是Person p,用p.变量名来调用或者getset方法,
    //这个程序连续输出三次25的原因是static变量只被加载一次;把static给删掉就好使了
package com.orcale.zuoye;

/**
 * @Author:WangQuan
 * @Description
 * @Date:Created in 1:53 下午 2020/12/14
 * @Modified By:
 **/
//如果是静态的,调取方式应该是类名.变量名,而不是静态的时候则是Person p,用p.变量名来调用或者getset方法,
    //这个程序连续输出三次25的原因是static变量只被加载一次;把static给删掉就好使了
public class Test2 {
    public static void main(String[] args) {
        Person person[] = new Person[30];
        Person a= new Person("张三","男",10);
        Person b= new Person("李四","男",20);
        Person c= new Person("王一凡","女",25);
        person[0] = a;
        person[1] = b;
        person[2] = c;

        for (int i = 0;i< person.length;i++){
            Person P = person[i];
            if(P!=null){
                String name = P.name;
                if(name == "王一凡"){
                    System.out.println(name);
                }else {
                    person[i] = null;
//                    Person P1 = person[i];
//                    System.out.println(P1.getName());
                }
            }

        }

    }

}
class Person{
    public  String  name = "null";
    public  String sex = "null";
    public  int age = 0;

    public Person() {
    }
    public Person(String name,String sex,int age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

你可能感兴趣的:(java学习)