新年在家学java之基础篇-高级类的特性

  • 继承 extends

    • 子类的共性代码都是继承自父类的,每个子类只要写自己特有的代码
    • class 子类 extends 父类
    • 继承提高了代码的复用性,提供了多态的前提,但是不要为了某个功能去继承
    • 子类不是父类的子集,而是对父类的扩展
    • 规则:子类不能直接访问父类中private的成员变量和方法
    • 只支持单继承,不能多重继承,可以多层继承。子类只能有一个父类
  • 方法的重写override
    • 子类重写父类的方法,只是重新编写方法体代码,如果父类的方法是public ,子类重写时就不能使用缺省以下的修饰符
    • alt+/ 就能找到重载的方法
    • 方法的重载是一个类可以有多个同名的方法 ,而方法的重写时子类可以重新写父类的方法,覆盖父类的方法
  • super
    • 用于访问父类中定义的属性,调用父类中定义的成员方法,在子类构造方法中调用父类的构造器
    • 使用super,子类可以调用所有的父类层级
    • 子类所有的构造器默认都会访问父类中空参数的构造器
    • 当父类没有空参数的构造器时,子类构造器必须通过super或者this指定调用本类或者父类构造器,且放在首行
    • 在父类只有有参构造可以使用时,子类必须显示构造一个构造器来掉父类的有参构造

  • 多态
    • 两种体现 重载和重写
    • 对象的多态--可以直接应用在抽象类和接口上
    • 父类类型的引用可以指向子类的对象--向上转型
  • object
    • object类是java类的根父类-基类
    • 未使用extends未指明父类,就是继承object类
    • 设置形参可以使用 object obj,可以确定传过来的是一个类,但是不确定是什么类
    • p.toString() 返回反映这个对象的字符串
  • 对象类型转换casting
    • 自动转换类型:小的数据类型转换成大的数据类型
    • 强制类型转换:把大的数据类型强制转换成小的数据类型
      • 如 int i=(int)1200L;
    • 父类可以自动转换成子类类型,但是子类得强制转换为父类
  • ==和equals
    • ==是基本类型比较值,值相等就为true,如果是比较对象,必须指向同一个对象才为true。且两遍的数据类型必须兼容否则出错
    • equals 只能比较引用类型,看是否指向同一个对象
    • equals在对于file,string,date和包装类时,只比较类型和内容,而不考虑是否是同一个对象
    • 用字面量创建对象时,只在常量池创建一个对象;而用new时,常量池有对象,堆中也有对象,字面量比new省内存
  • 包装类--需要后续完善 #完善
    • 针对八种基本类型的引用类型-包装类
    • jdk1.5以后支持自动拆箱装箱
    • 主要是为了基本数据类型与字符串直接的转化
    • 基本数据类型转字符串
      • int i=Integer.parseInt("123"); 数据类型转转字符串
  • static 静态
    • 实例变量,只有实例化之后才能使用,属于实例化对象的一部分,不能共用
    • 类变量不用实例化,直接类名.属性名就可以使用,是类的一部分,被所有这个类的实例化对象所共享,也叫静态变量
    • if(s !=null && !s.equals(""); --判断S不是空字符串
    • 在开发中多次使用的方法,把他抽象成一个工具类的方法
    • 静态方法,类加载以后就能使用,并且优于对象存在,不需要new,在static方法中不能使用this
    • 单例设计模式
      • 设计模式就是在我们实际编程过程中,逐渐总结出的一些解决问题的讨论套路
      • 单例模式就是只有一个实例(实例对象)
      • 构造器中有大量的代码,且new一次对象耗时很长占用很多资源,比较实用单例模式
      • 饿汉式的单例
        • 是在类加载之后,还没有人调用时就先new好一个对象,以后不论谁调用getInstance方法时都直接放回这个new对象
        • 构造私有化,调用这个类的人就不能直接使用new来创建对象 private 类名(){}
        • private static 类名 a =new 类名(); 私有的类变量
        • public static 类名 getInstance (){
        • return a;}
        • 使用时只能 类名 a= 类名.getInstance(); 都使用一个对象
      • 懒汉式单例
        • 最开始对象时null,只有第一个调用才new一个对象,之后所有调用我的都用这个对象
        • 构造私有化,调用这个类的人就不能直接使用new来创建对象 private 类名(){}
        • private static 类名 a =null;
        • public static 类名 getInstance (){
        • if (a ==nll) a =new 类名();
        • return a;}
      • 懒汉式和饿汉式的区别就是什么时候new对象。懒汉式存在线程安全,在多线程时可修复
  • 初始化块
    • 在程序的运行过程中,非静态代码块每次new对象都有重新执行,而静态代码块只执行一次
    • 匿名内部类?#完善
  • final
    • final的类不能被继承,且不能被子类重写,final标记的变量也被称为常量,名称约定大写。
    • final修饰的变量必须显示赋值,且不能再改变。final static 一起修饰变量就是全局常量
  • 抽象类 abstract class
    • 用abstract 修饰类时,这个类叫做抽象类,修饰方法时,这个方法叫做抽象方法(抽象方法只有方法的声明,没有方法的实现,以分号结束 :abstract int abstractMEthod(int a);
    • 含有抽象方法的类必须被声明为抽象类
    • 抽象类不能被实例化,被继承时子类必须重写父类的抽象方法,并提供方法体,若没有重写全部的抽象方法,子类仍为抽象类
    • final 和抽象类是冲突的。final是最终,它修饰的类是最终类不能被继承,而抽象类如果想要被使用,就必须继承抽象类,实现哪些抽象的方法
    • 抽象类可以有构造方法啊,但是不能直接创建抽象类的实例对象
    • 模板方法设计模式
      • 抽象类作为多个子类的通用模板,子类在抽象类基础上进行扩展改造。
  • 接口 interface
    • java不支持多重继承,有了接口就能实现多重继承,implements
    • class 类名 implements 接口{} 一个类可以实现多个接口(implements A接口,B接口),接口也可以继承其他接口
    • 接口中所有成员变量都默认是由public static final(全局常量)修饰,方法都是默认由public abstract修饰,且没有构造器
    • 如果类没有实现接口的所有方法,这个类就要定义为抽象类
    • 如果类既有继承又有实现,就要先写extends,后写implements
    • 如果父类老是在改,基于这个父类的子类等都会受到影响,在需要给父类增加方法时,就不能直接在父类上修改,只能新建接口,在接口上扩展,需要的子类自行实现接口 --为啥不用抽象而要用接口
    • 抽象类是对一类事物的高度抽象,既有属性又有方法,而接口是对方法的抽象,也就是对一系列对象进行抽象。对一类事物进行抽象应当使用抽象类,而对一系列动作抽象就要使用接口,对使用这些动作的类使用抽象动作就可以了。
  • 工厂方法 FactoryMethod
    • 通过工厂把new对象给隔离了,通过产品的接口可以接受不同实际产品的实现类,实例类名的改变不影响其他代码
    • BWM b3=new BWM3Factory().productBWM();  #不懂
  • 内部类
    • 外部的类想要用自己内部类的方法,得先new内部类的对象 new 类名().方法名()
    • 如果内部类是static,就不能使用外部类的非static得成员
    • 内部类主要是为了解决java不能多重继承的问题

原文地址:https://www.cnblogs.com/wuhy0809/p/12290095.html

时间: 2024-11-01 12:10:53

新年在家学java之基础篇-高级类的特性的相关文章

新年在家学java之基础篇--循环&数组

因为“野味肺炎”的肆虐,过年被迫宅家只能吃了睡.睡了吃.这么下次只能长膘脑子空空,不如趁此机会重新学习java基础,为日后做铺垫~ 循环结构: 几种循环:for(::),while(){},do{}while() switch的break,如果不加,会从当前匹配的开始输出一直到最后输出的 break 用在for 也能跳出循环,只能终止当前所在的for循环 continue 结束当前这次循环 return 跟break一样可以终止循环,但是return是结束整个方法,不管有多少层循环 break和

新年在家学java之基础篇-参数&修饰符&构造器

可变参数 不知道可能给方法传递多少个参数时使用这个方法 public void printInfo (String[] args) --可以定义一个数组,在调用这个方法适合赋值给一个数组 public void aaa (String... args) --用java特有的...来传递可变个数的参数,在使用时,与数组的使用方式相同 如果使用数组,在调用方法是要用 a.printInfo(null):没有参数就要定义一个空数组或者null,而第二种是可以直接使用a.aaa(); 如果一个方法有多个

新年在家学java之基础篇--类&方法

面向对象 面向对象OOP,面向过程POP 面向对象三大特征 封装 继承 多态 类 类由属性(对应类中的成员变量)和行为(成员方法)来构成 类的成员变量可以先声明,不用初始化,有默认值 方法名称如果多个单词,首个单词首字母小写,其余首字母大写,驼峰命名 new一个对象 A a = new A(); 修饰符 private 私有,只能该类以内的方法调用 pubilc 公共,大家都能调用 static 静态 ,这样的变量不需要类实例化成对象就可以使用,通过类名.属性就能使用--类变量 成员变量与局部变

新手学JAVA(三)----StringBuilder类

上一篇文章新手学JAVA(二)----String类与StringBuffer类的区别中了解到,String的值是不可变的,这就导致 每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变 类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象. StringBuffer类和StringBuilder类功能基本相似.算是两个双胞胎. 下面主要说两点 第一点  线程安全 StringBuffer  线程安全

JDBC-使用Java连接数据库-基础篇

这是小主第一次写Java连接数据库博客,初学Java之时,Java连接数据库是我最头疼的,不过经过一个月的学习,也差不多略有收获,所以给大家分享一下. Java连接数据库大约需要五大步骤: 创建数据库驱动 使用驱动获取数据库链接 创建传输器 使用传输器执行SQL,并返回结果 处理结果集 关闭资源 Java连接数据库主要使用的包分别是: java.sql      基础包 java.sqlx     扩展包 代码实现: 1 package a.li.ba.ba.select; 2 3 import

【Java基础第一弹】Java序列化基础篇

Java类通过实现java.io.Serializable 接口便可启用其序列化功能.实现了序列化的类的实例可以在不同的系统或JVM间传递,并且不会丢失原实例的相关状态及值. 为一个类开启序列化功能只需实现Serializable 接口即可,仅仅作为使用者可以不必了解其内部的更深层次的实现及流程,但是如果想要更好的使用序列化功能就需要与我一起详细的学习和了解它. 1.什么是Java序列化 Java类通过实现java.io.Serializable 接口以启用其序列化功能: import java

学java的第二篇博客

由于在培训课上老师演示的第一个程序是用记事本编辑,DOS命令行输出,所以了解了几个简单的DOS命令行代码: -dir(directory): 列出当前目录下文件及文件夹 -cd(change directory): 进入指定目录 -md(make directory): 创建目录 -rd(remove directory):删除目录 -cd..:返回上一级目录 -cd\:返回到根目录 -exit:退出DOS命令行 用记事本编辑好源程序代码后,运行cmd打开DOS命令行,输入javac 文件名.j

Java LinkedList基础篇

好久没用LinkedList,发现好多基础的东西都不会了,所以特别写这篇来总结一下关于LinkedList的基本用法. java.util class LinkedList<E> 构造函数: public LinkedList(); 创建一个空的链表. public LinkedList(Collection<? extends E> c); 按照已有集合的顺序来构造链表. 常用方法: public E getFirst(); 返回链表的第一个元素. public E getLas

Java编程基础篇第一章

计算机语言 人与计算机交流的方式. 计算机语言有很多种如:C语言,c++,Java等 人机交互 软件的出现实现了人与计算机之间的更好的交流(交互) 交互方式 图形化界面:便于交互,容易操作,简单直观,使用者容易上手. 命令行:需要一个控制台,需要输入特定指令,让计算机完成操作,同时还需要你记住一些命令. Java语言概述: 1. Java语言是SUN公司(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级编程语言. 2. Java语言是一门面向I