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;
}
}