IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java对象 -> 正文阅读

[Java知识库]java对象

对象

面向对象编程

本质

以类的方式组织代码,以对象的组织(封装)数据

抽象(将像的部分抽离出来)

三大特性

封装

该露的露,该藏的藏

"高内聚,低耦合",高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用

1,提高程序的安全性,保护数据

2,隐藏代码是实现过程

属性私有,get/set

public class Demo7 {
 ?private int id;
?
 ? // 获得这个数据
 ? ?public int getId() {
 ? ? ? ?return id;
 ?  }
 ? // 设置这个数据
 ? ?public void setId(int id) {
 ? ? ? ?this.id = id;
 ?  }
?
 ? ?public static void main(String[] args) {
 ? ? ? ?Demo7 demo7=new Demo7();
 ? ? ? ?demo7.setId(72);
 ? ? ? ?System.out.print(demo7.getId());
 ?  }
}
?

继承(如:直角三角形继承于三角形,前者是后者的子类)

本质是对某一类的抽象,从而实现对现实世界更好的建模

1,子类继承父类就有了父类的所有方法

2,java中所有的类都默认继承Object类

3,java中只有单继承没有多继承 父类只能有一个,子类可以有多个

4,私有的属性无法被继承

extends 继承

super

public class person{
 ? ?public String name="opq";
 ? ?public void f(){
 ? ? ? ?
 ?  }
}
?
class student extends person{
 ? ?public String name="waz";
 ? ?public void f(){
 ? ? ? ?this.name;//子类的name=waz
 ? ? ? ?super.name;//父类的name=opq
 ?  }
 ? ?public void k(){
 ? ? ? ?this.f();//子类的方法
 ? ? ? ?super.f();//父类的方法
 ?  } ? 
}
当子类实例化运行时,会调用父类默认的方法
 ? ?super();在子类中一般被隐藏了指的的 super.person();
调用父类的构造器必须要在子类的第一行
 ? ?当父类为有参构造时,子类的构造器也必须为有参构造

super的注意点

  • super调用父类的构造方法,必须放在子类构造方法的第一个

  • super必须只能出现在子类的方法或构造器中

  • super和this不能同时调用构造方法

this 区别

this:本身调用者这个对象

super:代表父类对象的应用

前提

this:没有继承也可以使用

super:必须继承后才能使用

构造方法

this(); 子类的构造方法

super(); 父类的构造方法

方法的重写

重写都是方法的重写,与属性无关

public class A{
 ? ?@Override ?//重写
 ? ?public void test(){
 ? ? ? ?super.test();
 ?  }
 ? 
}
public class B extends A{
 ? ?public void test(){
 ? ? ? ?
 ?  }
}
 public static void main(String[] args) {
 ? ? //静态方法:调用只和左边,定义的数据类型有关
 ? ? //非静态方法;重写
 ? ? A a=new A();
 ? ? a.test();//A
 ? ? //父类的引用指向了子类
 ? ? B b=new A();
 ? ? b.test();//非静态为A,静态为B
 ? ?
 }

重写:需要有继承关系,子类重写父类的方法

重写:子类的方法和父类必须相同:方法体不同

  • 方法名必须相同

  • 参数列表必须相同

  • 修饰符:范围可以扩大,不能缩小

  • 抛出的异常:范围,可以缩小,但不能扩大

为什么要重写

  • 父类的功能,子类不一定需要,或者不一定满足

多态(同一种事物会有多种形态,每种形态都不一样)

认识角度,先有对象后有类

代码角度,先有类后有对象

多态存在条件

  • 有继承关系

  • 子类重写父类方法

  • 父类指向子类对象

一个对象的实际类型是确定的,但可以指向的引用类型不确定了:父类的引用指向子类

public class ?person{
 ? ?
}
public class ?student extends person{
 ? ?
}
public static void main(String[] args)
{ ? 
 ? ? //一个对象的实际类型是确定的
 ? ?new student();
 ? ?new person();
 ? ?//指向的引用类型不确定:父类的引用指向子类
 ? ?//student 能调用的方法都是自己的或者继承父类的
 ? ?student s1=new student();
 ? ?//person 父类型,可以指向子类,但是不能调用子类独有的方法
 ? ?person s2=new student();
 ? ?object s3=new student();
}
总结:编译,看左边;运行,看右边

多态注意事项

  • 多态是方法的多态,属性没有多态

  • 父类和子类,有联系,类型转换异常(ClassCastException)

  • 存在条件:继承关系,方法需要重写。父类引用指向子类

无法重写的情况

  • static 方法,属于类,它不属于实例

  • final 常量,final修饰的方法也不能被继承

  • private 方法

instanceof

判断类的类型是否相似

public class ?person{
 ? ?
}
public class ?student extends person{
 ? ?public void go(){
 ? ? ? ?
 ?  }
}
public class ?teacher extends person{
 ? ?
}
public static void main(String[] args)
{ ? 
 ? ?// Object>person>studnet
 ? ?//Object>person>teacher
 ? ?Object o=new student();
 ? ?System.out.print(o instanceof person); true
 ? ?System.out.print(o instanceof student); true
 ? ?System.out.print(o instanceof object); ? true
 ? ?System.out.print(o instanceof teacher); ?flase
}
总结 ?System.out.print(A instanceof B);/当A与B有关系时,编写通过,否则,编译不通过
类型的转换 ?父 ? ?子
 高 ? ? ? ?低
 ? ?//父类转换为子类时,才能调用子类独有的方法
 ? ?person ?p=new studnet();
 ? ? student s=(student) p;
    s.go();
低 ? ? ?高
 ? ?//子类转换为父类可能会丢失自己本来的一些方法
 ? ?student s=new studnet();
 ? ?person p=s;
?
public class person{
 ? ?//2
 ?  {
 ? ? ? System.out.print("匿名代码块"); 
 ?  } 
 ? ?//1最先执行 只会执行一次 跟着类一起执行
     ?static{
 ? ? ? ? ?System.out.print("静态代码块"); 
 ? ?  }
 ? ?//3
 ? ?public person(){
 ? ? ? ?System.out.print("构造方法") 
 ?  }
}
?

抽象类

abstract 抽象类 单继承 extends

//abstract 抽象方法,只有方法名字,没有方法的实现
public abstract void doSomething();
1,不能new这个抽象类,只能靠子类去实现它:约束
2,抽象类中可以写普通的方法
3,抽象方法必须写在抽象类中
抽象类可以提高开发效率

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:27:07  更:2021-11-12 19:28:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:14:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码