我的java学习日志 day08

我的java学习日志 day08

2019年7月8日

温故知新

面向对象—编程范式(一种思考方式)

面向过程:注重细节;

类与对象的关系—类是对象的概括,对象是类的具体实现;

构造方法:用于创建对象;

this 待标当前类正在活动的对象(this是虚拟的指代)

构造代码块:放在类内,方法外,优先级最高

----------------------------------*-
面向对象的特征

封装、继承、多态、(抽象)

--------------------------------
封装:
方法也是封装的一种体现形式;

关于private的应用;

扫描二维码关注公众号,回复: 6791594 查看本文章

//创建一个人的类
class person{
// 属性
String name;
// private 将本类的属性变成私有化属性
private int age;
char gender;
// 间接给私有化属性赋值
public void sage(int age){
if(age<0){
}
{this.age=age;}

}

// 返回值
public int gage(){
return age;
}
}

封装:方法、类中属性私有化(private),通过公共的访问方式就能正常的赋值和取值

提高代码的安全性;

继承:

多个类中的内容相同,把相同的内容放到一个新类中,

让原来的类和这个新类通过extendes产生了关联关系----继承

原来的类是子类,新的有属性的类是父类,子类可以继承符类

的部分信息;

继承的方式----单继承(类与类之间的)

单继承(java支持): 一个子类只能有一个父类,父类可以有多个子类

多继承(c语言支持)

优点

例如class A{

m()
}
clss B{
n();
}

class c extends A,b{}—m()和n() 两个方法都能拿到,

极大提高代码的复用性; 仅c语言支持;

单继承优点、

例如class A{

int m(){};
}
clss B{
boolean m(){};
}

class exnds A,B{}—new c(); result =c.m(),此时会出现

方法混用的问题,无法确定返回值是 int类型或boolean类型;

而java中的单继承会避免这个问题,提高代码的复用性,

类与类之间是(c语言)多继承好还是(java)单继承好,

要看具体的使用场景;java只能单继承;

重写(覆盖):

在父子类中出现的方法签名一致的方法—就是方法的重写;

重写时要遵循方法重写的原则,共五种(两等 两小 一大)

两等:
1、父子类方法签名必须一致

2、如果父类的方法返回值类型是基本或void类型
子类的方法的返回值类型要和父类保持一致;

一小:1、如果父类的方法返回值是引用类型,那么子类的

方法返回值类型要么和父类的方法返回值类型一致,要么

就是父类方法返回值数据类型的子类;

二小暂时还没讲;

例如

例如class A{

m()
}
clss B extends A{
n();
}

一大:

子类的方法访问权限修饰符,要么和父类额访问权限修饰符一致,

要么大于父类的访问权限修饰符范围。

四种访问权限修饰符

     本类 	   子类         同包类       其他类

public 可以访问 可以 可以 可以

protected 可以 可以 可以 不可以

默认(不写) 可以 同包子类可以 可以 不可以

private 可以 不可以 不可以 不可以

父类的私有化信息、构造方法以及构造代码块子类都无法获取;

protected 对象调用信息所在类与当前类的位置关系;

子类继承 protected修饰的主类内的方法后,子类只能在子类自己的类中创建

子类名的对象,才能调动主类内的用protected修饰的方法;

只有public和默认可以修饰类;

----**–------**-*-

public class DemoLei {public static void main(String[] args){

}

}
class Animal{

public Animal(String i){
		}

// 方法
public void eat(){
System.out.println(“吃饭”);

}

// 非静态方法
public void sleep(){
System.out.println(“就是想睡觉”);
};
}

class pig extends Animal{
//创建一个无参构造
// 子类的无参构造在默认调用父类的无参构造;
//子类的构造方法创建对象之前,会先调用父类的构造方法
// 先有父类对象,再有子类对象;
public pig(){
//此时可以用super语句调用父类的无参构造
//在子类的构造方法中调用父类的构造方法
//要在代码的第一行 super和this不能同时出现
super("");
}
//创建另一个有参构造
//子类所有的构造方法都要默认父类的无参构造
public pig(String i){
this();

}
//	对eat进行重写
public void eat(){
	System.out.println("吃好吃的");
	System.out.println("吃完睡");

//在java中所有的非静态方法以及属性,都可以通过对象调用
//此时sleep是非静态方法,可以通过对象调用;
//this–只能代表当前类的对象
//super修饰 sleep可以代表父类对象专指代父类对象
super.sleep();
//即使不修饰或者用this修饰,底层还是会通过super调用sleep方法

}

}

super

关键字----用于在子类中调用父类信息(代表父类对象)所有的子类

的构造方法都要默认调用父类的无参构造,如果父类没有提供无参构造,子

类所有的构造方法需要通过super语句取调用对应形式的父类构造

super语句用于在子类构造方法中调用父类的构造方法,确保super语句

在方法代码中的第一行,父类对象优先于子类对象先出现;

执行顺序,父类的构造代码块>子父类构造方法>子类构造代码块>子类的构造方法

构造代码块和构造方法与对象同级;

----**---------------**--------------------
多态

代码在操作过程中天线打的多种形式

java时期----编译时期、运行时期

编译时多态–编译时期在编译时期进行代码绑定
public static void main(){}

public static void main(int i){}

方法的重载就是多态的一种体现形式;

运行时多态—在运行时期进行代码的绑定

方法的重写也是多态的一种表现形式。

向上造型:声明类是父类,子类是实际创建类,创建对象;

具体方法看父类;

多态的优点:统一参数类型、统一方法功能调用、降低耦合度,

降低多个模块之间的关联;

猜你喜欢

转载自blog.csdn.net/qq_31783363/article/details/95093262