super关键字的详解、子类对象实例化全过程、多态、方法重载、重写、Object类、包装类使用

智能车八邻域图像算法_二 智能车八邻域图像算法 文章目录智能车八邻域图像算法前言一、一些想法二、生长方向的使用1.点的生长方向的表示2. 用点的生长方向来做初步判断1.引入库2.读入数据总结 前言 上一篇里面讲过用八邻域来获得赛道边界:智能车八邻域图像算法 当已经能稳定获得赛道边界时,就可以进行元素识别,获得偏差了。 这里就介绍一下我的一些思路。 早在前两年,优快云上就有一篇关于八邻域如何处理元素的文章第十五届全国大学生智能汽车竞赛-双车组三轮图像处理总结,写得很好,我当时也参考了这篇文章,但是我觉得不是很详细,所以我这里想写得 阅读详情

super关键字的使用

1.super理解为:父类的
2.super可以用来调用:属性、方法、构造器

3.super的使用:调用属性和方法

3.1 我们可以在子类的方法或构造器中。通过使用"super.属性"或"super.方法"的方式,显式的调用
父类中声明的属性或方法。但是,通常情况下,我们习惯省略"super."
3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的

使用"super.属性"的方式,表明调用的是父类中声明的属性。
3.3 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的
使用"super.方法"的方式,表明调用的是父类中被重写的方法。

4.super调用构造器
4.1 我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
4.2 "super(形参列表)"的使用,必须声明在子类构造器的首行!
4.3 我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)“只能二选一,不能同时出现
4.4 在构造器的首行,没有显式的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器:super()
4.5 在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)”,调用父类中的构造器
代码:

在这里插入图片描述在这里插入图片描述
运行结果
在这里插入图片描述

子类对象实例化的全过程

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

super关键字的使用
1.super理解为:父类的
2.super可以用来调用:属性、方法、构造器

3.super的使用:调用属性和方法
3.1 我们可以在子类的方法或构造器中。通过使用"super.属性"或"super.方法"的方式,显式的调用
父类中声明的属性或方法。但是,通常情况下,我们习惯省略"super."
3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的
使用"super.属性"的方式,表明调用的是父类中声明的属性。
3.3 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的
使用"super.方法"的方式,表明调用的是父类中被重写的方法。

4.super调用构造器
4.1 我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
4.2 "super(形参列表)"的使用,必须声明在子类构造器的首行!
4.3 我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)“只能二选一,不能同时出现
4.4 在构造器的首行,没有显式的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器:super()
4.5 在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)”,调用父类中的构造器

子类对象初始化的全过程

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述 子类对象实例化的全过程

  1. 从结果上来看:(继承性)
    子类继承父类以后,就获取了父类中声明的属性或方法。
    创建子类的对象,在堆空间中,就会加载所有父类中声明的属性。

  2. 从过程上来看:
    当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,…
    直到调用了java.lang.Object类中空参的构造器为止。正因为加载过所有的父类的结构,所以才可以看到内存中有
    父类中的结构,子类对象才可以考虑进行调用。

明确:虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为new的子类对象。

面向对象特征之三:多态性

在这里插入图片描述

1.理解多态性:可以理解为一个事物的多种形态。
2.何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
3. 多态的使用:虚拟方法调用
在这里插入图片描述

有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
总结:编译,看左边;运行,看右边。

4.多态性的使用前提: ① 类的继承关系 ② 方法的重写

5.对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)

package com.zy.duotai;
public class PersonTest {
	public static void main(String[] args) {
		Person p1 = new Person();
		p1.eat();
		
		Man man = new Man();
		man.eat();
		man.age = 25;
		man.earnMoney();	
		//*************************************************
		System.out.println("*******************");
		//对象的多态性:父类的引用指向子类的对象
		Person p2 = new Man();
//		Person p3 = new Woman();
		//多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法 ---虚拟方法调用
		p2.eat();
		p2.walk();
		
//		p2.earnMoney();	
		System.out.println(p2.age);	
	}
}
class Person{
	String name;
	int age;
	
	public void eat() {
		System.out.println("人吃饭");
	}
	public void walk() {
		System.out.println("人走路的方法");
	}
}
class Man extends Person{
	boolean isSmoke;
	
	public void earnMoney() {
		System.out.println("男人负责赚钱养家");
	}
public void eat() {
		System.out.println("男人喜欢吃肉");
	}
	public void walk() {
		System.out.println("男人喜欢跑步作为运动");
	}
}
class Woman extends Person{
	boolean isBeauty;
	public void shop() {
		System.out.println("女人超级喜欢购物");
	}
public void eat() {
		System.out.println("女人喜欢吃一些健康美味的食物");
	}
	public void walk() {
		System.out.println("女人喜欢通过散步或者小跑的方式来锻炼身体");
	}
	
}
//多态性的使用举例一:
public class AnimalTest {
	public static void main(String[] args) {	
		AnimalTest test = new AnimalTest();
		test.func(new Dog());	
		test.func(new Cat());
	}
	
	public void func(Animal animal){//Animal animal = new Dog();
		animal.eat();
		animal.shout();
		
		if(animal instanceof Dog){
			Dog d = (Dog)animal;
			d.watchDoor();
		}
	}
	
//	public void func(Dog dog){
//		dog.eat();
//		dog.shout();
//	}
//	public void func(Cat cat){
//		cat.eat();
//		cat.shout();
//	}
}
class Animal{
	public void eat(){
		System.out.println("动物:进食");
	}
	public void shout(){
		System.out.println("动物:叫");
	}
}

class Dog extends Animal{
	public void eat(){
		System.out.println("狗吃骨头");
	}
	
	public void shout(){
		System.out.println("汪!汪!汪!");
	}
	public void watchDoor(){
		System.out.println("看门");
	}
}
class Cat extends Animal{
	public void eat(){
		System.out.println("猫吃鱼");
	}	
	public void shout(){
		System.out.println("喵!喵!喵!");
	}
}

//举例二:

class Order{
	public void method(Object obj){	
	}
}
//举例三:
class Driver{
	public void doData(Connection conn){//conn = new MySQlConnection(); / conn = new OracleConnection();
		//规范的步骤去操作数据
//		conn.method1();
//		conn.method2();
//		conn.method3();		
	}
}

方法的重载和方法的重写

1.重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。

重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法,如需父类中原有的方法则可使用 super 关键字。
在这里插入图片描述

在这里插入图片描述

向上转型和向下转型

在这里插入图片描述

父子对象之间的转换分为了向上转型和向下转型,它们区别如下:

向上转型 : 通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换
向下转型 : 通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换

class Person{
    public void print()
    {
        System.out.println("我是人");
    }
}
class Student extends Person{
    public void print()
    {
        System.out.println("我是学生");
    }
}
public class Test{
    public static void main(String[] args)
    {
        //向上转型 父类 父类对象 = 子类实例
        Person per = new Student();
        per.print();
    }
}

向下转型

package com.zy.polystactic;

public class PersonTest {

	public static void main(String[] args) {

		
		//对象的多态性:父类的引用指向子类的对象
		Person p2 = new Man();
//		Person p3 = new Woman();
		//多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法 ---虚拟方法调用
		p2.eat();
		p2.walk();
		Man m =(Man) p2;

//		p2.isSmoking = true;
		//有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致
		//编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。
		
		//如何才能调用子类特有的属性和方法?
		//向下转型:使用强制类型转换符。
		Man m1 = (Man)p2;
		m1.earnMoney();
		m1.isSmoke = true;
		
		System.out.println(p2.id);//1001打印的是父类的id
		
	}
}
class Person{
	String name;
	int age;
	int id =1001;
	public void eat() {
		System.out.println("人吃饭");
	}
	public void walk() {
		System.out.println("人走路的方法");
	}
}
class Man extends Person{
	boolean isSmoke;
	int id =1002;
	public void earnMoney() {
		System.out.println("男人负责赚钱养家");
	}
public void eat() {
		System.out.println("男人喜欢吃肉");
	}
	public void walk() {
		System.out.println("男人喜欢跑步作为运动");
	}
}

Object 类的使用

java.lang.Object类
1.Object类是所有Java类的根父类
2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
3.Object类中的功能(属性、方法)就具有通用性。
属性:无
方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()
wait() 、 notify()、notifyAll()
4. Object类只声明了一个空参的构造器

1.Clone()方法的使用

//Object类的clone()的使用
public class CloneTest {
	public static void main(String[] args) {
		Animal a1 = new Animal("花花");
		try {
			Animal a2 = (Animal) a1.clone();
			System.out.println("原始对象:" + a1);
			a2.setName("毛毛");
			System.out.println("clone之后的对象:" + a2);
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
	}
}

class Animal implements Cloneable{
	private String name;

	public Animal() {
		super();
	}

	public Animal(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}

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

	@Override
	public String toString() {
		return "Animal [name=" + name + "]";
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		// TODO Auto-generated method stub
		return super.clone();
	}
	
}

fianllize()方法

当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。 一个子类覆盖了处理系统资源或执行其他清理的finalize方法。

面试题
final、finally 、 finallize的区别?
final finally两个是关键字,finallize是java.long.Object类的方法,

final可以用来修饰类,方法和变量(成员变量或局部变量)。

1.1 修饰类

当用final修饰类的时,表明该类不能被其他类所继承。当我们需要让一个类永远不被继承,此时就可以用final修饰,但要注意:

final类中所有的成员方法都会隐式的定义为final方法。

1.2 修饰方法

使用final方法的原因主要有两个:

(1) 把方法锁定,以防止继承类对其进行更改。

(2) 效率,在早期的java版本中,会将final方法转为内嵌调用。但若方法过于庞大,可能在性能上不会有多大提升。因此在最近版本中,不需要final方法进行这些优化了。

final方法意味着“最后的、最终的”含义,即此方法不能被重写。

注意:若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法。

1.3 修饰变量

final成员变量表示常量,只能被赋值一次,赋值后其值不再改变。类似于C++中的const。

当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。

final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。

finally

finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。(×)(这句话其实存在一定的问题)
只有与finally对应的try语句块得到执行的情况下,finally语句块才会执行。以上两种情况在执行try语句块之前已经返回或抛出异常,所以try对应的finally语句并没有执行。

finallize()

finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,gc都能搞定,一般情况下我们又不会用new以外的方式去创建对象),所以一般是不需要程序员去实现finalize的。

equals()方法

* 
 * 面试题: == 和 equals() 区别
 * 
 * 一、回顾 == 的使用:
 * == :运算符
 * 1. 可以使用在基本数据类型变量和引用数据类型变量中
 * 2. 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
 *    如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
 * 补充: == 符号使用时,必须保证符号左右两边的变量类型一致。
 * 
 * 二、equals()方法的使用:
 * 1. 是一个方法,而非运算符
 * 2. 只能适用于引用数据类型
 * 3. Object类中equals()的定义:
 *    public boolean equals(Object obj) {
	        return (this == obj);
	  }
 *    说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
 * 
 * 4. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是
 *    两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
 *    
 * 5. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们
 *    就需要对Object类中的equals()进行重写.
 *    重写的原则:比较两个对象的实体内容是否相同.
 */
public class EqualsTest {
	public static void main(String[] args) {
		
		//基本数据类型
		int i = 10;
		int j = 10;
		double d = 10.0;
		System.out.println(i == j);//true
		System.out.println(i == d);//true
		
		boolean b = true;
//		System.out.println(i == b);
		
		char c = 10;
		System.out.println(i == c);//true
		
		char c1 = 'A';
		char c2 = 65;
		System.out.println(c1 == c2);//true
		
		//引用类型:
		Customer cust1 = new Customer("Tom",21);
		Customer cust2 = new Customer("Tom",21);
		System.out.println(cust1 == cust2);//false
		
		String str1 = new String("atguigu");
		String str2 = new String("atguigu");
		System.out.println(str1 == str2);//false
		System.out.println("****************************");
		System.out.println(cust1.equals(cust2));//false--->true
		System.out.println(str1.equals(str2));//true
		
		Date date1 = new Date(32432525324L);
		Date date2 = new Date(32432525324L);
		System.out.println(date1.equals(date2));//true
		
		
	}
}

class Customer{
//属性略
}

单元测试Junit4

Java中的JUnit单元测试

  • 步骤:

  • 1.选中当前工程 - 右键选择:build path - add libraries - JUnit 4 - 下一步

  • 2.创建Java类,进行单元测试。
    此时的Java类要求:① 此类是public的 ②此类提供公共的无参的构造器

  • 3.此类中声明单元测试方法。

  • 此时的单元测试方法:方法的权限是public,没有返回值,没有形参

  • 4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org.junit.Test;

  • 5.声明好单元测试方法以后,就可以在方法体内测试相关的代码。

  • 6.写完代码以后,左键双击单元测试方法名,右键:run as - JUnit Test

  • 说明:

  • 1.如果执行结果没有任何异常:绿条

  • 2.如果执行结果出现异常:红条

public class JUnitTest {
	
	int num = 10;
	
	@Test
	public void testEquals(){
		String s1 = "MM";
		String s2 = "MM";
		System.out.println(s1.equals(s2));
		//ClassCastException的异常
//		Object obj = new String("GG");
//		Date date = (Date)obj;
		
		System.out.println(num);
		show();
	}
	
	public void show(){
		num = 20;
		System.out.println("show()....");
	}
	
	@Test
	public void testToString(){
		String s2 = "MM";
		System.out.println(s2.toString());
	}
}

在这里插入图片描述

包装类的使用

在这里插入图片描述在这里插入图片描述

基本数据类型转换成包装类

	//基本数据类型 --->包装类:调用包装类的构造器
	@Test
	public void test1(){
		
		int num1 = 10;
//		System.out.println(num1.toString());
		Integer in1 = new Integer(num1);
		System.out.println(in1.toString());
		
		Integer in2 = new Integer("123");
		System.out.println(in2.toString());
		
		//报异常
//		Integer in3 = new Integer("123abc");
//		System.out.println(in3.toString());
		
		Float f1 = new Float(12.3f);
		Float f2 = new Float("12.3");
		System.out.println(f1);
		System.out.println(f2);
		
		Boolean b1 = new Boolean(true);
		Boolean b2 = new Boolean("TrUe");
		System.out.println(b2);
		Boolean b3 = new Boolean("true123");
		System.out.println(b3);//false
		
		
		Order order = new Order();
		System.out.println(order.isMale);//false
		System.out.println(order.isFemale);//null
	}
	
}

class Order{
	
	boolean isMale;
	Boolean isFemale;
}

包装类转换成基本数据类型

//包装类--->基本数据类型:调用包装类Xxx的xxxValue()
	@Test
	public void test2(){
		Integer in1 = new Integer(12);
		
		int i1 = in1.intValue();
		System.out.println(i1 + 1);
		
		
		Float f1 = new Float(12.3);
		float f2 = f1.floatValue();
		System.out.println(f2 + 1);
	}

自动装箱、自动拆箱

jdk1.5之后,java有了自动装箱和自动拆箱的新特性,无需调用构造器和xxxValue()方法去实现包装类和基本数据类型之间的相互转换

/*
	 * JDK 5.0 新特性:自动装箱 与自动拆箱
	 */
	@Test
	public void test3(){
//		int num1 = 10;
//		//基本数据类型-->包装类的对象
//		method(num1);
		
		//自动装箱:基本数据类型 --->包装类
		int num2 = 10;
		Integer in1 = num2;//自动装箱
		
		boolean b1 = true;
		Boolean b2 = b1;//自动装箱
		
		//自动拆箱:包装类--->基本数据类型
		System.out.println(in1.toString());
		
		int num3 = in1;//自动拆箱
		
	}
	
	public void method(Object obj){
		System.out.println(obj);
	}

基本数据类型和包装类–>String

//基本数据类型、包装类--->String类型:调用String重载的valueOf(Xxx xxx)
	@Test
	public void test4(){
		
		int num1 = 10;
		//方式1:连接运算
		String str1 = num1 + "";
		//方式2:调用String的valueOf(Xxx xxx)
		float f1 = 12.3f;
		String str2 = String.valueOf(f1);//"12.3"
		
		Double d1 = new Double(12.4);
		String str3 = String.valueOf(d1);
		System.out.println(str2);
		System.out.println(str3);//"12.4"
		
	}

String -->基本数据类型、包装类

//String类型 --->基本数据类型、包装类:调用包装类的parseXxx(String s)
	@Test
	public void test5(){
		String str1 = "123";
		//错误的情况:
//		int num1 = (int)str1;
//		Integer in1 = (Integer)str1;
		//可能会报NumberFormatException
		int num2 = Integer.parseInt(str1);
		System.out.println(num2 + 1);
		
		String str2 = "true1";
		boolean b1 = Boolean.parseBoolean(str2);
		System.out.println(b1);
	}

static 关键字

变量

在这里插入图片描述在这里插入图片描述

static关键字的使用

1.static:静态的
2.static可以用来修饰:属性、方法、代码块、内部类

3.使用static修饰属性:静态变量(或类变量)
  3.1 属性,按是否使用static修饰,又分为:静态属性 vs 非静态属性(实例变量)
   实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的 非静态属性时,不会导致其他对象中同样的属性值的修改。
   静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
3.2 static修饰属性的其他说明:
   ① 静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用
   ② 静态变量的加载要早于对象的创建。
   ③ 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。

       ④		类变量	实例变量
       类		yes		no
       对象		yes		yes

3.3 静态属性举例:System.out; Math.PI;

4.使用static修饰方法:静态方法
   ① 随着类的加载而加载,可以通过"类.静态方法"的方式进行调用
   ②   静态方法   非静态方法
类   yes    no
对象   yes   yes
  ③ 静态方法中,只能调用静态的方法或属性
   非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
5. static注意点:
   5.1 在静态的方法内,不能使用this关键字、super关键字
   5.2 关于静态属性和静态方法的使用,大家都从生命周期的角度去理解。
6. 开发中,如何确定一个属性是否要声明为static的?
  > 属性是可以被多个对象所共享的,不会随着对象的不同而不同的。
  > 类中的常量也常常声明为static
开发中,如何确定一个方法是否要声明为static的?
  > 操作静态属性的方法,通常设置为static的
   > 工具类中的方法,习惯上声明为static的。 比如:Math、Arrays、Collections

代码;

public class StaticTest {
	public static void main(String[] args) {
		
		Chinese.nation = "中国";
		
		
		Chinese c1 = new Chinese();
		c1.name = "姚明";
		c1.age = 40;
		c1.nation = "CHN";
		
		Chinese c2 = new Chinese();
		c2.name = "马龙";
		c2.age = 30;
		c2.nation = "CHINA";
		
		System.out.println(c1.nation);
		
		//编译不通过
//		Chinese.name = "张继科";
		
		
		c1.eat();
		
		Chinese.show();
		//编译不通过
//		Chinese.eat();
//		Chinese.info();
	}
}
//中国人
class Chinese{
	
	String name;
	int age;
	static String nation;
	
	
	public void eat(){
		System.out.println("中国人吃中餐");
		//调用非静态结构
		this.info();
		System.out.println("name :" +name);
		//调用静态结构
		walk();
		System.out.println("nation : " + nation);
	}
	
	public static void show(){
		System.out.println("我是一个中国人!");
		//不能调用非静态的结构
//		eat();
//		name = "Tom";
		//可以调用静态的结构
		System.out.println(Chinese.nation);
		walk();
	}
	
	public void info(){
		System.out.println("name :" + name +",age : " + age);
	}
	
	public static void walk(){
		
	}
}

在这里插入图片描述

VideoPose3D | 环境搭建 文章目录环境要求下载PyTorch基本步骤验证安装问题修复数据集设置Human3.6MCPN detections配置wget命令安装CPN评估环境测试问题测试报错 无法识别参数3 3 3 3卡在最后评估 主要参考:GitHub / facebookresearch / VideoPose3D 环境要求 Dependencies Make sure you have the followin... 阅读详情

相关推荐

企业知识库AI助手的权限管理架构:如何实现细粒度控制?

在展开架构设计前,我们需要先明确“细粒度权限”的核心定义,并理解它对AI助手的特殊意义。权限管理的“粒度”,本质是权限控制的精准程度。维度粗粒度权限细粒度权限资源范围entire document(整个文档)field/paragraph(字段/段落)操作类型read/write(读/写)generate_summary/download/export(生成摘要/下载/导出)上下文约束无(静态权限)time/ip/device(时间/IP/设备)适用场景简单系统(如内部wiki)

大数据洞察的博客 1042

JAVA三大特征之二继承(二)对于Super类的详解(重难点)

基于Idea的继承特性的Super类详解

m0_63248617的博客 512

告别WSL!用AMD ROCm7在Windows上跑ComfyUI,我的幻x2025 AI Max+ 395体验与性能调优心得

本文详细介绍了在搭载AMD Ryzen AI Max+ 395处理器的幻x2025笔记本上,如何通过ROCm7在Windows原生环境下高效运行ComfyUI,并分享了一系列性能调优技巧和实战经验,帮助开发者摆脱WSL束缚,提升AI创作效率。

weixin_29102619的博客 1116

Super类

Super super是调用父类的构造方法,必须在构造方法的第一个 super必须只能出现在子类的方法或者构造方法中 super和this不能同时调用构造方法 super和this代表的对象不同 this:本身调用者这个对象 super:代表父类对象的引用 super和this的前提不同 this:没有继承也可以使用 super:只能在继承条件下才能使用 super和this的构造方法不同 this( ); 本类的构造 super( ); 父类的构造 (1)子类引用父类pro

小芦荟同学的博客 1074

1014. 福尔摩斯的约会 (20)-PAT乙级真题

1014. 福尔摩斯的约会 (20) 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’

柳婼 の blog 2646

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 330

Java学习17-- super类

建立一个叫做kids的class它的上级是human class,从主程序testjan05来调用kids class里面的method my_prt它可以打印输出kids class里的变量name以及this.name和super.name。刚才举例中,介绍了当子类constructor运行时,必然会首先默认跑一遍父类的constructor,那句代码通常是隐藏在子类constructor第一行 写做super();的构造方法,肯定在构造方法的第一个出现,系统会偷偷加上。this:本身调用的这个对象。

weixin_42892630的博客 592

补丁1.0:使用Eviews做ADF检验

补丁1.0:使用Eviews做ADF检验

Jet4505的博客 1961

super关键字、抽象类(重要)、final关键字、接口(重点)

super关键字、抽象类(重要)、final关键字、接口(重点)

w991852的博客 713

添加USB wifi驱动到RK3568

在日常开发中我们经常需要用到wifi功能,一般来说soc厂家都会事先做好了几个厂家的wifi驱动在内核源码目录下,我们只需要按原理图配置对应的设备树即可。常用的wifi的接口有:USBSDIOPCIE下面来介绍这这种接口是如何使用wifi芯片。提示:以下是本篇文章正文内容,下面案例可供参考本小节介绍了一个配置一个USBwifi驱动的整个流程,并没有介绍到SDIO,下小节基于AP6256介绍如何使用。

qq_24093081的博客 2049

Kafka 性能优化与常见问题排查

Kafka 的高性能依赖于合理的集群设计、参数优化与高效的监控体系。生产环境中,应重点关注I/O 瓶颈、分区规划、Producer/Consumer 参数调优,并通过监控与排查手段快速定位问题,从而保障 Kafka 在实时场景下的稳定运行。

X2829352498的博客 235

Java关键字 —— super 详细解释!一看就懂 有代码实例运行!

super在父类、子类相关联的操作中经常被用到是Java中的,用于(超类)的成员变量、方法或构造函数。在没有继承和被继承关系的类中,几乎不被使用我个人喜欢将super理解为 “父类的”, “引用父类的”

dream_ready的博客 1万+

【Unity Shader】Special Effects(十二)Glow 外发光(UI)

Properties_GlowColor ("外发光颜色", Color) = (0, 0, 0, 1)_GlowIntensity("外发光强度", Range(0, 1)) = 1参数详解:_GlowColor:外发光颜色,指定外发光的显示颜色。_GlowIntensity:外发光强度,指定外发光的显示强度,0为不可见,1为最强强度。

神码编程 936

【面向对象-07】继承、重写(重载)、子类对象的实例化过程、super、this关键字指向

目录 1.继承 1). 继承的优势 2). Java中继承的特点 3). 继承子类中关键字 4). 继承中子类、父类成员(变量/方法)的特点 5). 子类重写 (覆盖) 父类中方法 (1). 何时重写 (2). 重写条件 (3). 重写、重载区别 2.子类对象的实例化过程 1). 子类能否覆盖父类的构造方法 2). 隐式super语句和显式super语句 3). 使用super语句的注意事项 4). 总结super语句 3.子类this的真实指向 1). 子类对象实例化过

百里慕溪 4374

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 继承、方法重载与重写、this 与 super 关键字

本文深入讲解了Java继承的核心概念与实践。首先分析了继承的本质,通过extends实现代码复用,并剖析了子类对象创建时的内存模型(先父类后子类)。其次详细区分了方法重载(同一类中同名不同参)与方法重写(子类覆盖父类方法),强调重写需遵循"两同两小一大"原则。重点解析了this和super关键字:this代表当前对象引用,用于区分变量或调用本类构造;super代表父类引用,用于访问父类成员。最后通过动物继承体系的实战案例,展示了继承、方法重写与关键字的具体应用,为掌握Java面向对象编程

2503_93734861的博客 1237

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java 面向对象 - Java 重写与重载

方法重写(Overriding)和重载(Overloding)是Java 多态性的不同表现,重写是父类与子类之间多态性的一中表现,重载可以理解为多态的具体表现形式。方法重载是一个类中定义了多个方法名相同,而他们的参数量不同或数量相同而类型和次序不同,成为方法的重载。方法重写是在子类存在方法与父类的方法的名字相同,而且参数、类型一致,返回值也一样,只是方法内逻辑的重写,就成为方法的重写方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

weixin_39392044的博客 1720

细讲 Java 的父子继承、方法的重写与super关键字

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成继承关系。子类可以对从父类中继承来的方法进行改造,我们称为方法的重写 (override、overwrite)。也称为方法的重置、覆盖。在Java类中使用super关键字来调用父类中的指定操作:super可用于访问父类中定义的属性,super可用于调用父类中定义的成员方法,super可用于在子类构造器中调用父类的构造器。

共同学习,共同成长 1977

【3-4】《Java面向对象高级知识》——继承、重写和重载、final关键字、抽象类、接口、多态、Object类、内部类、包装类、可变参数、递归

文章目录一、继承格式二、子类实例化内存分析三、super详解四、重写1、重写的概念2、重写和重载的区别五、final关键字六、抽象类1、抽象类的概念2、抽象类常见问题3、抽象类和普通类的区别七、接口1、面向接口编程思想2、接口的编写3、接口和抽象类的区别八、多态1、多态的体现2、instanceof九、Object类概述1、toString2、equals十、内部类概述1、成员内部类(了解)2、局部内部类3、匿名内部类4、静态内部类 一、继承格式 非常重要的部分!!! 格式:先描述父类,再描述子类,子类通

程序媛乐园 1180

Java面向对象之方法重载、重写和关键字this、super

认识方法重载、方法重写,它们的区别。认识关键字this和super,并了解其用法。

qq15035899256的博客 1898

子类实例化、重载-重写、this、super、final、static关键字

个人笔记,请勿转载

ljj66666的博客 523

java 子类重写父类的方法,父类怎样使用子类独有的方法

重写和重载 重写是继承的时候,重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。 重载,是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。重载可以避免使用完全不同的方法来完成几乎相同的任务,可以使方法根据受到的参数的不同,执行不同的操作。 子类重写父类的方法 子类重写了父类的方法,如果用父类的对象去调用,就会使用父类的实现 如果用子类的对象去调用...

weixin_44893585的博客 3119

方法重写和重载的区别

一、方法重写(0veriding) 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。 子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。 重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。 在Java中覆盖继承父类的方法就是通过方法的重写来实现的。所谓

weixin_47786582的博客 4964

day05-继承、方法的重写、super、多态、object类、包装类、native

1.继承 继承的作用: 继承的出现减少了代码冗余,提高了代码的复用性。 继承的出现,更有利于功能的扩展。 继承的出现让类与类之间产生了关系,提供了多态的前提。 2.重写(override/overwrite) 要求: 1. 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表 2. 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型 3. 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限 子类不能重写父类中声明为...

m0_62361663的博客 460

Java——类和对象(类的继承、重载与重写、对象转型、关键字abstract)

Java 类的继承、对象转型 目录Java 类的继承、对象转型类的继承构造器方法方法重写对象转型向上转型应用场景向下转型 类的继承 java当中一个类可以被另一个类通过关键字extends继承,继承的类成为子类或派生类,被继承的类成为父类、基类或者超类。 eg:public class UNStudent extends Student{} 子类: UNStudent 父类: UNStudent 现在有一个父类Student public class Student { private

guochaoHNU的博客 2694

java:类和对象、内存位置,封装继承多态,重写super final关键字

面向对象知识点。

qq_34517343的博客 1212

第07章_面向对象编程(进阶)(this,继承,方法的重写,权限修饰,super,多态性,Object类的使用,native关键字的理解)

财产继承:绿化:前人栽树,后人乘凉“绿水青山,就是金山银山”样貌:继承之外,是不是还可以"进化":继承有延续(下一代延续上一代的基因、财富)、扩展(下一代和上一代又有所不同)的意思。

小丁的博客 621

零基础学JAVA--Day17(Super关键字+方法的重写+多态)

super代表父类的引用,用于访问父类的属性、方法、构造器1.访问父类的属性,但不能访问父类的private属性super.属性名;2.访问父类的方法,不能访问父类的private方法super.方法名(参数列表);3.访问父类的构造器(这点前面用过):super(参数列表):只能放在构造器的第一句,只能出现一句!

Dxxyyyy的博客 1438
上一篇: MongoDB快速上手、windows安装、常用命令、文档基本增删改查、mongoDB的索引
下一篇: 单例设计模式的八种写法及其优缺点分析(java版)
·小脑斧·
博客等级 码龄7年 10粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值