Java面向对象
2021/4/18 20:27:58
本文主要是介绍Java面向对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
this关键字
this关键字的作用:
@Data public class jtest { private String name; public jtest(){ //调用构造方法,只能在构造方法中使用,且必须是第一行 this("dwx"); } public jtest(String name){ //区分成员变量和局部变量 this.name=name; } public void sN(){ //调用类中其他方法 this.setName("dwx"); } }
this在类中表示当前类将来创建出来的对象
封装,继承,多态
使用private修饰需要封装的成员变量;提供一个公开方法来获取和设置成员变量
Java中类只有单继承,没有多继承,接口可以多继承
Super关键字
在子类继承父类后,可以使用super来访问或调用父类中方法或属性
子类构造器会隐式调用父类的无参构造(super()),如果父类的无参构造被有参构造覆盖,则不能调用父类无参构造
super调用父类构造器必须在子类构造器的第一行、
方法重写:
静态方法不能重写:
- 父类的静态方法不能被子类重写为非静态方法
- 父类的非静态方法不能被子类重写为静态方法
- 子类可以定义与父类的静态方法同名的静态方法,相当于父类子类都有个同名的静态方法
私有方法不能被子类重写,因为子类继承父类不能直接访问父类的私有方法,但是可以拥有两个同名的方法
方法在重写时:
- 方法名必须相同
- 参数列表必须相同
- 访问控制修饰符只能扩大不能缩小
- 抛出异常的范围只能缩小不能扩大
- 返回类型可以相同,或者子类方法返回类型为父类方法返回类型的子类型
多态
一个父类的引用可以指向其任何一个子类对象
编译看左边:找编译时,编译器会检测对象引用类型中是否含有指定的成员,没有就会报错
instanceof:x instanceof y,主要看变量x与变量y是否存在父子关系,有父子关系编译会通过,没有父子关系编译会报错;输出是true还是false要看x指向的实际类型是不是y的子类
总结:
- 父类引用可以指向子类对象,子类引用不能指向父类对象
- 把子类对象直接赋值个父类引用叫做向上转型,不需要强制转型
- 把指向子类对象的父类引用赋值给子类引用叫做向下转型,需要强制转换
- 向上转型会丢失子类的特有方法,但是子类重写父类的方法依旧有效
修饰符
代码块(匿名代码块)和静态代码块,匿名代码块的作用主要是初始化成员变量的值
public class jtest { //匿名代码块 { System.out.println("执行匿名代码块"); } static { System.out.println("执行静态代码块"); } public static void main(String[] args) { //类加载,执行静态代码块,只执行一次;创建对象时自动执行匿名代码块,执行两次 jtest jtest1=new jtest(); jtest jtest2=new jtest(); } }
抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类
接口
接口中的变量都是静态常量(public static final修饰的)
一个类可以实现多个接口,且需要实现所有接口里的方法,如果没有全部实现,则需要将这个类声明为抽象类
一个接口可以继承多个父接口
内部类
内部类分为4种:
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
成员内部类
成员内部类不能写静态方法或静态属性
public class JavaTest { class Inner{ } public static void main(String[] args) { //先实例化外部类 JavaTest javaTest=new JavaTest(); //再实例化内部类 JavaTest.Inner inner=javaTest.new Inner(); } }
成员内部类作用:
- 可以访问外部类的所有属性,包括私有属性和方法
- 如果内部类的变量名与外部类中的成员变量名相同,就要通过外部类对象.属性来访问外部类中的变量,内部类的变量可以通过this.属性来访问
public class JavaTest { private int id; class Inner{ private int id=9; public void test(){ System.out.println(JavaTest.this.id); } } public static void main(String[] args) { //先实例化外部类 JavaTest javaTest=new JavaTest(); //再实例化内部类 JavaTest.Inner inner=javaTest.new Inner(); inner.test(); } }
静态内部类
静态内部类直接用外部类类名来实例化就行
public class JavaTest { private int id; public static class Inner{ } public static void main(String[] args) { JavaTest.Inner inner= new JavaTest.Inner(); } }
不能访问外部内的非静态变量或方法,可以声明自己的静态变量和方法
局部内部类
局部内部类是在一个方法内部声明一个类,可以访问外部类的成员变量和方法,局部内部类要访问其所在方法的局部变量,局部变量必须是final修饰
局部内部类由其所在方法实例化
匿名内部类
匿名内部类需要依托于其他类或接口创建
匿名内部类的声明必须是在使用new关键字时。
这篇关于Java面向对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?