
1.定义一个抽象类,必须有子类、 2.且子类要覆写所有抽象类的abstract函数 3.抽象类对象的实例化可以利用对象多态性->son类向上转型的方式完成 4.利用"对象的多态性",子类向上转型实例化Father ——这样调用@Override时执行的就是子类覆写的函数 5.抽象类最大的特点——无法自己实例化对象,通过"对象的多态性"向上转型实现 6.注意: i.抽象类必须被继承,因此禁止用final修饰 ii.抽象类中可以定义成员属性&普通方法、子类实例话时会调用abstract类的构造函数 ——若abstract类没有提供、则必须通过super()形式调用指定参数的构造函数 7.抽象类中可以没有抽象方法、但仍然无法new对象 8.抽象类中可以提供static方法、并且该方法不受到抽象类实例话对象的影响**
abstract class Message{
private String type;
public abstract String getConnection();//抽象函数不需要写函数体{}
public void setType(String type){
this.type = type ;
}
public String getType(){
return this.type;
}
}
class Database extends Message
{
@Override//覆写
public String getConnection(){
return super.getType();
}
}
public class Abstract {
public static void main(String[] args) {
Message msg = new Database();
msg.setType("China");
System.out.println(msg.getConnection());
}
}
二、包装类和数据转换
包装类:
1.对象型包装类(Object直接子类):Boolean、Character
2.数值型包装类(Number直接子类):Byte、Short、Integer、Long、Float、Double
3.数据装箱、拆箱:
i.数据装箱:将基本数据类型保存到包装类中,利用包装类的构造方法完成
Integer类:public Integer (int value)
Double类: public Double (double value)
Boolean类:public Boolean (boolean value)
ii.数据拆箱:
数值类包装类已经由number类定义了拆箱 *** 作
Boolean型:public boolean boolean value()
public class Package_class {
public static void main(String[] args) {
Integer obj_1 = new Integer(10);//手动装箱 *** 作:将int类型转换成为类的对象
int x = obj_1.intValue();
Double obj_2 = 20.2;//自动装箱 *** 作,不关心构造方法了
obj_2 += 10;//直接参与数值运算了
double y = obj_2;//自动拆箱、相当于调用了doublevalue()函数
Object obj_3 = 100.0; //double自动转型为Double,向上转型为Object
double num = (double) obj_3; //向下强制转换为double
Integer x1 = new Integer(20);//手动装箱
Integer y1 = 20;//自动装箱
Integer z1 = 20;
int d = 20;
System.out.println( "x1 == y :" + (x1 == y1) ); //false
System.out.println( "z1 == y1 :" + (z1 == y1)); //true
System.out.println( "x1 == d :"+(x1 == d) ); //true
System.out.println( "y1 == d :" +(y1 == d) );//true
int y2 = (int) y1; //Object向下强转成int类型
System.out.println( "y2 == d :" +(y2 == d) );//true
System.out.println( "x1.equals(y1) :" +(x1.equals(y1)));//用equals函数进行比较
//将字符串变成int类型:Integer.parseInt();
String str = "1234";
int num_1 = Integer.parseInt(str);
System.out.println( num_1 + num_1);
//将字符串变成boolean类型
System.out.println( "将字符串变成boolean类型:" );
String strA = "true";
String strB = "Hello JavaDemo";
boolean flagA = Boolean.parseBoolean(strA);
boolean flagB = Boolean.parseBoolean(strB);
System.out.println( flagA ); //若是true则转换为true,其余情况全是false
System.out.println( flagB );//false
//基本数据类型转化为String类型:两种方法
//1⃣️连接空字符串,但是会单独声明字符串常量,有垃圾产生
int Num = 1000;
String str_int = Num + "";
System.out.println( str_int.length() );
//2⃣️利用valueOf()实现转换,更高效
String str_valueof = String.valueOf(Num);
System.out.println( str_valueof.length() );
}
}
三、接口
接口:
1.接口属于一个特殊的类,使用interface定义
2.接口中可以包含"全局常量"、"抽象方法"(必须是public访问权限)
————、"default函数"、"static函数"
3.关于interface的使用原则:
1⃣️接口需要被子类实现,子类利用implements关键字可以实现多个父接口
2⃣️若子类不是abstract类、则一定要覆写子类中全部抽象函数
3⃣️接口对象可以利用子类对象的"向上转型"进行实例化
4.关于extends、inplements关键字的顺序
1⃣️子类可以继承父类实现父接口
2⃣️如果出现混用,应该先继承、再接口
3⃣️子类接口:❕可以同时有多个父接口,但每个子类只能继承一个类
5.关于全局常量在接口中有简化版本(参见IMessage接口)
1⃣️全局常量: public static final String Info = "Hello JavaDemo";
简化为➡️ String str = " ";
2⃣️抽象函数: public abstract String getInfo();
简化为➡️ String getInfo()
6.接口可以多继承!!类(class)只能单继承
7.接口中定义:default、static函数
1⃣️接口中默认函数为抽象函数,可以用:public default boolean connect(){return true}
2⃣️定义普通函数、普通函数可以被子类继承:但是接口的普通函数需要通过接口实例化对象调用
3⃣️如果我们定义static函数、只需要接口名就可以调用了
4⃣️public static IMessage getInstance(){return new MessageIpl}
以上是在接口中定义static方法、可以直接实例化接口子类对象
//Interface.java
interface IMessage
{
String Info = "Hello JavaDemo";//全局常量:public static final 省略
String getInfo();//public abstract 省略
public default String fun1(){
return "被继承的普通函数fun1";}
public static IMessage getInstance() {
return new MessageImpl() ;
}
}
interface Ichannel{
public abstract boolean connect(); //第二个接口、定义抽象方法
}
interface I_service extends IMessage,Ichannel
{
public abstract String service();
}
class MessageImpl implements I_service,IMessage
{
@Override
public String service ( ){
return "service 接口";
}
@Override
public String getInfo(){//抽象函数覆写
if(this.connect()){
return "Successful!";
}
return "Default...";
}
@Override
public boolean connect(){
return false;
}
}
public class Interface {
public static void main(String[] args) {
IMessage msg = new MessageImpl();//子类实例化父类接口、向上转型
System.out.println( msg.getInfo() );
System.out.println(msg.fun1());
IMessage msg_1 = IMessage.getInstance() ;//
System.out.println( msg_1.getInfo() );
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)